Как я могу заставить Perl принимать отрицательные числа в качестве аргументов командной строки? - PullRequest
6 голосов
/ 02 марта 2011

Есть ли способ заставить 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).

1 Ответ

14 голосов
/ 02 марта 2011
$ perl -E "say join ', ', @ARGV" -- -1 2 3
-1, 2, 3

Хитрость заключается в использовании двойного дефиса (--) для завершения анализа опции. Двойной дефис - это соглашение GNU :

$ touch -a
usage: touch [-acfm] [-r file] [-t [[CC]YY]MMDDhhmm[.SS]] file ...
$ touch -- -a
$ ls
-a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...