1

例如,

如果我跑

./program -i 

做亚甲

如果我跑

./program 

做subB

我的代码目前看起来像这样

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

但这看起来很乱。如果没有提供选项而不是检查每个单独的选项,是否有让它运行 subB ?

4

3 回答 3

3

您可以将选项存储在散列中并检查散列的计算结果是真还是假:

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

当工具仅对一个(或特定组合)选项进行操作时,我有时会使用删除哈希习语,以便我可以让用户知道所有内容是否按预期使用。更新:只需用您的子调用替换打印语句。

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

无论如何,我会检查每个单独的选项。对于必须在三年内修改程序的人来说,这让事情变得更加清晰......甚至可能是你。

咬紧牙关,完整编码。它很乏味,但从长远来看可以节省时间。

    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 回答