【问题标题】:perl Getopt::Long::GetOptions usageperl Getopt::Long::GetOptions 用法
【发布时间】:2013-05-23 08:29:54
【问题描述】:

我想使用Getopt::Long::GetOptions 来获取脚本的命令行选项。

我有这样的要求:

perl script.pl -c <name1> -c <name2> -m <name3> argument

这里我们有选项标志-c-mm 是可选的,argument 是强制性的。

谁能指出GetOptions 的正确用法?

【问题讨论】:

    标签: shell perl command-line-tool


    【解决方案1】:

    来自Getopt::Long documentation

    GetOptions 在未提供选项时不会返回错误结果

    这就是为什么它们被称为“选项”。

    换句话说,如果您需要一个强制参数,则需要在 GetOptions 调用之外显式检查它。


    如果参数是@ARGV 的一部分而不是选项,请使用-- 表示选项结束。在下面的示例中,脚本将通过$ARGV[0] 访问argument

    perl script.pl -c <name1> -c <name2> -m <name3> -- argument
    

    【讨论】:

    • 或者您可以设置pass_through 让所有未知参数转到@ARGVuse Getopt::Long qw(:config pass_through) 但要小心,因为这确实会影响选项值的“类型检查”。
    【解决方案2】:

    这是一个示例代码和结果。

    https://gist.github.com/kyanny/5634832

    如果您想了解有关如何处理多个值选项的更多信息,请参阅文档:http://perldoc.perl.org/Getopt/Long.html#Options-with-multiple-values

    还有一点,Getopt::Long::GetOptions 不提供处理强制选项的方法。您应该检查强制选项是否在@ARGV中并在您的手中引发异常等。

    【讨论】:

    • 感谢 Kyanny 您的回答有帮助。我在这里还有一个问题我想使用“+”作为选项?我可以做 GetOptions( '+=f' => sub {$plus = "true"} )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多