例えば、
私が走ったら
./program -i
subAを行う
私が実行した場合
./program
subBを行う
私のコードは現在このようになっています
subB if(!$opt_a && !$opt_b && !opt_b);
しかし、これは厄介に見えます。個々のオプションをチェックするのではなく、オプションが提供されていない場合にsubBを実行させる方法はありますか?
オプションをハッシュに保存し、ハッシュが true または false に評価されるかどうかを確認できます。
use strict;
use warnings;
use Getopt::Long;
my %options;
GetOptions( \%options, 'opt_a=i', 'opt_b', 'opt_c' );
if ( %options ) {
# Season with option validation ..
# Usage : $options{opt_a} instead of $opt_a
subA();
}
else {
subB();
}
ツールがオプションの 1 つ (または特定の組み合わせ) でのみ動作する場合は、ハッシュ削除イディオムを使用することがあります。これにより、すべてが期待どおりに消費されたかどうかをユーザーに知らせることができます。更新: print ステートメントをサブ呼び出しに置き換えるだけです。
use strictures;
use Getopt::Long;
GetOptions( \my %opt, "int=i", "str=s", "bool" );
print "OPTIONS, I HAZ DEM\n" if %opt;
if ( delete $opt{int} )
{
print "* I HAZ A INT\n";
}
elsif ( delete $opt{str} )
{
print "* I HAZ STRING\n";
}
elsif ( delete $opt{bool} )
{
print "* I HAZ A TRUTH\n";
}
else
{
print "I CAN HAZ OPTION?\n";
}
print "DO NOT WANT: ", join(", ", keys %opt), $/
if %opt;
とにかく、個々のオプションをそれぞれチェックします。3 年以内にプログラムを変更しなければならない人にとっては、事態がより明確になります...そして、それはあなたでさえあるかもしれません。
弾丸を噛んで完全にコーディングします。面倒ですが、長期的には時間を節約できます。
if ($opt_a)
{
# do whatever
}
elsif ($opt_b)
{
# do whatever
}
else
{
# default behaviour if no arguments passed from command line
}