2012-04-24 10 views
6

Getopt::Longを使用して数十の引数/フラグを取得できるスクリプトがあります。 次のようなフラグは混在できません。--linux --unixは一緒に供給できません。今私はifステートメントを使って確認できることを知っていますが、これを行うにはもっときれいで良い方法があると確信しています。スクリプトへの特定の引数の混在の回避

if私はフラグの多くの組み合わせを許可したくない場合はブロックが醜いことができます。

提案がありますか?

おかげで、

答えて

3

Getopt::Longは、このような機能を持っていることは思えない、と何も迅速search of CPAN後に突き出していません。しかし、あなたはあなたのオプションを保存するためにハッシュを使用できるかどうか、自分自身の関数を作成することは、あまりにも醜いいないようです:

use warnings; 
use strict; 
use Getopt::Long; 

my %opts; 
GetOptions(\%opts, qw(
    linux 
    unix 
    help 
)) or die; 

mutex(qw(linux unix)); 

sub mutex { 
    my @args = @_; 
    my $cnt = 0; 
    for (@args) { 
     $cnt++ if exists $opts{$_}; 
     die "Error: these options are mutually exclusive: @args" if $cnt > 1; 
    } 
} 

これはまた、2つの以上の選択肢にスケール:

mutex(qw(linux unix windoze)); 
関連する問題