を使用して数十の引数/フラグを取得できるスクリプトがありますGetopt::Long
。次のような特定のフラグを混在させること--linux --unix
はできません。一緒に指定することはできません。if
ステートメントを使用して確認できることはわかっています。それを行うためのよりクリーンでより良い方法はありますか?
if
フラグの多くの組み合わせを許可したくない場合、ブロックは醜くなる可能性があります。
Getopt::Longにそのような機能があるようには見えず、 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));