2011-03-02 116 views
5

有没有办法让Perl避免将负值视为命令行开关?无论是字符串化也不backslashing的说法似乎在Linux下的帮助:如何让Perl接受负数作为命令行参数?

$ 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). 

回答

13
$ perl -E "say join ', ', @ARGV" -- -1 2 3 
-1, 2, 3 

诀窍是使用双连字符(--)结束选项解析。 Double-hyphen is a GNU convention

$ touch -a 
usage: touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ... 
$ touch -- -a 
$ ls 
-a 
+0

哈,感谢您的链接,daxim。我认为这次双击事件与GNU有关,但没有Google。 – zoul 2011-03-02 16:28:13

+0

' - '是[POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html)标准;请参阅URL的第12.2节中的准则10。 – 2011-03-02 16:44:32