2

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

my %transfers = ();

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

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

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

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

当我输入

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

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

我想知道如何绕过字符串值中的“=”并使代码执行我期望的操作?

非常感谢!

4

2 回答 2

2

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

于 2009-08-14T02:36:15.887 回答
1

Getopt::Long

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

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

或者,您可以使用:

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

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

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

它总是会在第一个“ =”上分裂。

于 2009-08-14T02:34:26.213 回答