1

例えば、

私が走ったら

./program -i 

subAを行う

私が実行した場合

./program 

subBを行う

私のコードは現在このようになっています

subB if(!$opt_a && !$opt_b && !opt_b);

しかし、これは厄介に見えます。個々のオプションをチェックするのではなく、オプションが提供されていない場合にsubBを実行させる方法はありますか?

4

3 に答える 3

3

オプションをハッシュに保存し、ハッシュが 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();
}
于 2013-03-12T11:08:57.980 に答える
1

ツールがオプションの 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;
于 2013-03-12T15:15:20.423 に答える
0

とにかく、個々のオプションをそれぞれチェックします。3 年以内にプログラムを変更しなければならない人にとっては、事態がより明確になります...そして、それはあなたでさえあるかもしれません。

弾丸を噛んで完全にコーディングします。面倒ですが、長期的には時間を節約できます。

    if ($opt_a) 
  {
    # do whatever
  }
elsif ($opt_b)      
  {
    # do whatever
  }
else
  {
    # default behaviour if no arguments passed from command line
  }
于 2013-03-12T14:53:15.067 に答える