如何在Perl中解析引用的和不带引号的参数?

Laz*_*zer 1 perl command-line

我希望我的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 = ><
$
Run Code Online (Sandbox Code Playgroud)

是否存在处理此问题的通用方法,而不是尝试检测是否使用了引号?

Que*_*tin 10

shell将数据传递给Perl.

  • program a b将发送ab
  • program 'a b' 会寄 a b
  • program "a b" 会寄 a b
  • program a\ b 会寄 a b

Perl有AFAIK,无法区分最后三个中的任何一个.

你可以split在空间上的每一个参数,这将获得你正在描述的效果......但它将意味着以不同的方式工作到那里的每个其他应用程序.

  • 你可以做到.我会向用户抛出错误报告并显示使用信息. (9认同)
  • 究竟; 如果用户明确引用了参数,那么它不是*"两个命令行参数",它就是一个.将它视为两个会让你的用户讨厌你. (7认同)