例如,
如果我跑
./program -i
做亚甲
如果我跑
./program
做subB
我的代码目前看起来像这样
subB if(!$opt_a && !$opt_b && !opt_b);
但这看起来很乱。如果没有提供选项而不是检查每个单独的选项,是否有让它运行 subB ?
您可以将选项存储在散列中并检查散列的计算结果是真还是假:
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();
}
当工具仅对一个(或特定组合)选项进行操作时,我有时会使用删除哈希习语,以便我可以让用户知道所有内容是否按预期使用。更新:只需用您的子调用替换打印语句。
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;
无论如何,我会检查每个单独的选项。对于必须在三年内修改程序的人来说,这让事情变得更加清晰......甚至可能是你。
咬紧牙关,完整编码。它很乏味,但从长远来看可以节省时间。
if ($opt_a)
{
# do whatever
}
elsif ($opt_b)
{
# do whatever
}
else
{
# default behaviour if no arguments passed from command line
}