2011-03-02 14 views
5

¿Hay alguna manera de evitar que Perl trate los valores negativos como conmutadores de línea de comandos? Ni stringifying ni backslashing el argumento parece ayudar en Linux:¿Cómo puedo hacer que Perl acepte números negativos como argumentos de línea de comandos?

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

Respuesta

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

El truco está utilizando el doble guión (--) para terminar el análisis de las opciones. Double-hyphen is a GNU convention:

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

Ha, gracias por el enlace, daxim. Pensé que el doble ataque tenía algo que ver con GNU, pero no lo logró. – zoul

+0

El '-' es un estándar [POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap12.html); ver la Pauta 10 en §12.2 de la URL. –

Cuestiones relacionadas