【问题标题】:How can I make Perl's Getopt::Long not process a literal = in a parameter name?如何使 Perl 的 Getopt::Long 不处理参数名称中的文字 =?
【发布时间】:2009-08-14 22:16:11
【问题描述】:

我写了一个 Perl 程序“transfer.pl”,输入参数是哈希值(键和值都是字符串)。代码段为:

my %transfers = ();

if (!GetOptions("transfer=s" => \%transfers))
{
    Usage();
    exit(1);
}

我用的是windows系统。在命令行中,我输入:

perl tranfer.pl --transfer "table = %s"="[TableName=%s]"

我希望键是table = %s,值是[TableName=%s],但似乎Getopt::Long总是找到第一个=,所以键是table,值是%s=[TableName=%s]

当我输入时

perl tranfer.pl --transfer "table \= %s"="[TableName\=%s]"

键是table \,值是%s=[TableName\=%s]

我想知道如何绕过字符串值中的“=”并让代码按照我的预期进行?

非常感谢!

【问题讨论】:

    标签: perl getopt-long


    【解决方案1】:

    Getopt::Long 不允许这样做;第一个= 始终用于将键与值分开。您将需要使用user-defined subroutine 来处理该选项,或者在完成GetOptions 之后拆分key=value 对,或者使用一些任意转义机制,例如使用“%25”来表示密钥中的= .

    【讨论】:

      【解决方案2】:

      来自Getopt::Long

      如果选项目标是对哈希的引用,则选项将采用 key=value 形式的字符串作为值。该值将与哈希中的指定键一起存储。

      GetOptions ("define=s" => \%defines);

      或者,您可以使用:

      GetOptions ("define=s%" => \$defines);

      与命令行选项一起使用时:

      --define os=linux --define vendor=redhat

      它将始终在第一个“=”处拆分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多