我希望我的perl脚本能够正确地将由空格分隔的两个命令行参数解析为两个变量:
$ cat 1.pl
print "arg1 = >$ARGV[0]<\n";
print "arg2 = >$ARGV[1]<\n";
$ perl 1.pl a b
arg1 = >a<
arg2 = >b<
$ perl 1.pl "a b"
arg1 = >a b<
arg2 = ><
$
是否存在处理此问题的通用方法,而不是尝试检测是否使用了引号?
答案 0 :(得分:10)
shell将数据传递给Perl。
program a b
会发送a
和b
program 'a b'
将发送a b
program "a b"
将发送a b
program a\ b
将发送a b
Perl有,AFAIK,无法区分最后三个中的任何一个。
你可以split
关于空格的每个参数,这将得到你描述的效果......但是这意味着以不同的方式工作到那里的每个其他应用程序。
答案 1 :(得分:1)
昆汀对Windows的回答并不完全正确。
同时,如果你想解析开关,Getopt :: Long是最好的。但是如果你有两个非开关参数,你可以试试这个暴力方法:
my @args = map { split ' ' } @ARGV;
die usage() unless @args == 2;
或者这个:
die usage()
unless (
my ( $arg1, $arg2 )
= @ARGV == 1 ? ( split ' ', $ARGV[0], 3 )
: @ARGV == 2 ? @ARGV
: ()
) == 2
;
在这里,die usage()
只是一个伪代码。