例如,
如果我跑
./program -i
做subA
如果我跑
./program
做subB
我的代码目前看起来像这样
subB if(!$opt_a && !$opt_b && !opt_b);
但这看起来很乱。如果没有提供选项而不是检查每个选项,是否仍然使它运行subB?
答案 0 :(得分: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();
}
答案 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;
答案 2 :(得分:0)
无论如何,我会检查每个选项。对于那些需要在三年内修改程序的人来说,它会更加清晰......甚至可能是你。
咬紧牙关并完整编码。它繁琐但从长远来看节省时间。
if ($opt_a)
{
# do whatever
}
elsif ($opt_b)
{
# do whatever
}
else
{
# default behaviour if no arguments passed from command line
}