Estoy buscando a alguien que confirme o corrija autoritariamente lo que creo que sé sobre la opción -CSDA
en la línea shebang de un script de Perl.¿De qué sirve que se especifique -CSDA solo en la línea shebang?
Consulte perldoc perlrun para la documentación de -CSDA
. Brevemente
- S:
STDIN
,STDOUT
ySTDERR
se supone que son en UTF-8- D: UTF-8 es la capa PerlIO predeterminado para la entrada y salida de corrientes
- A: @ARGV se espera que los elementos a ser cadenas codificadas en UTF-8
Para que
-CSDA
tenga algún efecto, se debe especificar en la línea de comando como enperl -CSDA script.pl
.Antes de 5.10,
-CSDA
en la línea shebang fallaría en silencio debido a que los flujos estándares ya habrían sido abiertos y@ARGV
ya incluido en el momento en que se encontró a menos-CSDA
ya se especificó en la línea de comandos también.Después de 5.10,
-CSDA
que aparece solo en la línea shebang provocaperl
croar debido a ese problema.Un guión con
-CSDA
que utiliza para trabajar conperl
s pre-5.10 debe tener la-CSDA
retirados de la línea shebang porque nunca se invocó con esas opciones en la línea de comandos (y las opciones, si se especifica únicamente en el línea shebang, no hizo nada).
Me encantaría obtener algunos comentarios sólidos sobre cuáles de mis suposiciones anteriores son incorrectas.
+1. Para el último elemento, en sistemas donde '/ usr/bin/perl' no es el intérprete, pero es un programa que decide qué versión de' perl' invocar (por ejemplo, como en sistemas OS X donde '5.8' y' 5.10' coexistir), '-CSDA' en la línea shebang hace que' perl' gracie cuando se invoca. –
Si fuera así, sería un error en el script de contenedor. Pero cuando lo comprobé en una Mac, descubrí que el problema es que 5.10.0 (que viene con OS X 10.6.6) no permite -C siempre, mientras que 5.10.1 (que es lo que tengo en mi máquina Linux) lo permite si los indicadores especificados ya están activos. La especificación de perl5.8.9 en el shebang hace honor a -CSDA correctamente. – Anomie
Gracias por la aclaración. Muy apreciado. –