Getopt::Long 和 GetOptions 中的子程序

oli*_*erg 3 perl arguments

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

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

我如何获得要传递给 Salt 的参数?尝试了一些事情,例如:

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

甚至

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

但它不会工作

我知道我可以通过做 => $pandora 来让它工作,然后在代码中使用一个条件 if ($pandora) { &Salt($pandora) } 但我会发现将 sub 直接放在 getOptions 中会更好,如果可能的

谢谢

jhn*_*hnc 6

"pandora=s" => sub { my ($optname, $optval) = @_; Salt($optval) },
Run Code Online (Sandbox Code Playgroud)

它也可以处理哈希。

请参阅文档中的用户定义子程序来处理选项部分。