2011-03-02 115 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