如果没有提供选项,运行子程序的最佳方法是什么? Perl getOpt

时间:2013-03-12 11:01:14

标签: perl options

例如,

如果我跑

./program -i 

做subA

如果我跑

./program 

做subB

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

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

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

3 个答案:

答案 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
  }