我编写了一个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]
。
我想知道如何绕过我的字符串值中的“=”并使代码按照我的预期进行操作?
非常感谢!
答案 0 :(得分:2)
Getopt::Long
不允许这样做;第一个=
始终用于将键与值分开。您需要使用user-defined subroutine来处理该选项,或者在key=value
完成后拆分GetOptions
对,或者使用一些任意转义机制,例如使用“%25
”来代表密钥中的=
。
答案 1 :(得分:1)
如果选项目标是对散列的引用,则该选项将采用形式为key = value的字符串作为值。该值将与散列中的指定键一起存储。
GetOptions ("define=s" => \%defines);
或者你可以使用:
GetOptions ("define=s%" => \$defines);
与命令行选项一起使用时:
--define os=linux --define vendor=redhat
它将始终在第一个“=
”上分开。