2010-03-27 7 views
9

¿Cómo se configura el modo de mancha en un script Perl con un tinglado¿Cómo configuro el modo de contaminación en un script de Perl con un '#!/Usr/bin/env perl'- shebang?

#!/usr/bin/env perl 

?

+2

Ayuda si no puede predecir la ubicación del binario de perl (/ usr/bin o/usr/local/bin). http://www.perlmonks.org/?node_id=716740 - Supongo que la pregunta es si puede predecir la ubicación de env ... –

+3

En mi PC utilizo/usr/local/bin/perl y en mi netbook/usr/bin/perl. Entonces con/usr/bin/env perl no tengo que cambiar mis perl-scripts. Y supongo que enviarán la próxima versión de mi sistema operativo con la versión 5.10.1 de Perl, así que tal vez use en mi PC nuevamente el Perl a bordo con/usr/bin/perl y allí tampoco tendré que cambiar mi shebangs –

+0

Gavin, la ubicación de 'env' está estandarizada. – daxim

Respuesta

11

puede pasar la variable de entorno PERL5OPT en la línea shebang:

#!/usr/bin/env PERL5OPT=-T perl 

Esto me parece un poco retrógrado.

Otra opción, es volver a ejecutar la secuencia de comandos en el modo de mancha si detecta que no está en:

#!/usr/bin/env perl 

warn 'Taint mode is '.(${^TAINT} ? 'on' : 'off'); # For debugging 

exec($^X,'-T',$0,@ARGV) unless ${^TAINT}; 

# do stuff under taint mode here 

Obviamente, este es un importante rendimiento de inicio golpe.

+3

No se puede especificar una variable en un shebang con/usr/bin/env. Si lo hace, provocará que env se ejecute en un bucle infinito, sin llegar siquiera al comando solicitado. Probé esto contra Linux y FreeBSD. – Zed

+1

Sí, parece ser que solo OS-X admite actualmente el primer conjuro. –

2

Desde el modo de mancha sólo se puede activar a través de la bandera -T y env no aceptará ninguna bandera en una línea tinglado, su mejor opción es ejecutar el programa a través de perl -T script.pl en lugar de ejecutar la secuencia de comandos directamente.

Si es absolutamente necesario para hacer cumplir el modo de mancha en el tinglado, se podría hacer un script taintperl en algún lugar de su PATH (por ejemplo,/usr/local/bin) con el siguiente contenido:

#!/bin/sh 
/usr/bin/env perl -T 

Luego, en su script de Perl, tienen

#!/usr/bin/env taintperl 
+0

En muchos sistemas operativos, no puede usar un script interpretado como un intérprete de guiones. Tendría que hacer esto en un lenguaje compilado, p. C –

+2

@GavinBrock Eso es cierto para el programa mencionado inmediatamente después del '#!'. Aquí, es '/ usr/bin/env', que se compila. A su vez, 'env' no se preocupa de si' taintperl' es un programa compilado o no. – maxelost

Cuestiones relacionadas