Getopt :: Long多个交换机

时间:2013-03-01 15:18:17

标签: perl options long-integer getopt

我有三种方法和两种开关

我想

  • 如果设置了SwitchA,则要运行的方法A
  • 如果设置了SwitchA和SwitchB,则要运行的方法B
  • 如果设置了SwitchA和SwitchB并且生成了SwitchB的争论,则运行MethodC

喜欢这样

./main --switchA
./main --switchA --switchB
./main --switchA --switchB Hello

我的代码

my $result = GetOptions{
             "SwitchA" => \$opt_a,
             "SwitchB:s" => \$opt_b
   };


 methodA if($opt_a);
 methodB if($opt_a && $opt_b eq "");
 methodC if($opt_a && $opt_b ne "")

我尝试了不同的东西,但实质上,如果我只想运行MethodB,方法A总是运行,如果我想运行MethodB,MethodA总是运行。

还没有完成对MethodC的测试。

任何帮助?

1 个答案:

答案 0 :(得分:1)

methodA if $opt_a && !defined($opt_b);
methodB if $opt_a && defined($opt_b) && $opt_b eq "";
methodC if $opt_a && defined($opt_b) && $opt_b ne "";

if ($opt_a) {
   if (defined($opt_b)) {
      if ($opt_b eq "") {
         methodB
      } else {
         methodC
      }
   } else {
      methodA
   }
}