如何让Perl接受负数作为命令行参数?

Zai*_*aid 6 perl command-line

有没有办法让Perl避免将负值视为命令行开关?在Linux下,字符串化和反斜杠似乎都没有帮助:

$ perl  -e 'print "@ARGV\n";' 4 5
  4 5

$ perl  -e 'print "@ARGV\n";' -4 5
  Unrecognized switch: -4  (-h will show valid options).

$ perl -e 'print "@ARGV\n";' "-4" 5
  Unrecognized switch: -4  (-h will show valid options).

$ perl -e 'print "@ARGV\n";' '-4' 5
  Unrecognized switch: -4  (-h will show valid options).

$ perl -e 'print "@ARGV\n";' \-4 5
  Unrecognized switch: -4  (-h will show valid options).
Run Code Online (Sandbox Code Playgroud)

zou*_*oul 14

$ perl -E "say join ', ', @ARGV" -- -1 2 3
-1, 2, 3
Run Code Online (Sandbox Code Playgroud)

诀窍是使用double-hyphen(--)来结束选项解析.双连字符是GNU约定:

$ touch -a
usage: touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
$ touch -- -a
$ ls
-a
Run Code Online (Sandbox Code Playgroud)