GetOptions中的Getopt :: Long和子例程

时间:2019-02-18 15:27:53

标签: perl arguments

是否可以将参数传递给通过getopt :: long调用的子例程? 例如,当用户在命令行上指定 script.pl -pandora参数时,我让此代码调用&Salt

GetOptions (            "domain=s"    => \$domain,
                        "pandora=s"   => \&Salt,
                        "reverse=s"   => \$reverse,
                        "help"        => \&Usage)
       or die(&Usage);

我该如何将论点传递给Salt? 尝试了几件事:

GetOptions (            "domain=s"    => \$domain,
                        "pandora=s"   => \&Salt($pandora),
                        "reverse=s"   => \$reverse,
                        "help"        => \&Usage)
       or die(&Usage);

甚至

    GetOptions (            "domain=s"    => \$domain,
                            "pandora=s"   => \&Salt($_[1]),
                            "reverse=s"   => \$reverse,
                            "help"        => \&Usage)
       or die(&Usage);

但无法正常工作

我知道我可以通过执行=> $ pandora使其工作,然后在代码中使用条件说明if($ pandora){&Salt($ pandora)},但是我发现将子项直接放入会更好如果可能,在getOptions中输入

谢谢

1 个答案:

答案 0 :(得分:4)

"pandora=s" => sub { my ($optname, $optval) = @_; Salt($optval) },

它也可以处理哈希。

请参阅文档中的User-defined subroutines to handle options部分。