2012-09-24 12 views
7

Me doy cuenta de que debo incluir la línea shebang solo en los scripts que queremos ejecutar directamente en el shell. Tampoco veo la línea shebang incluida en ninguno de los grandes paquetes de módulos que he instalado localmente.¿Alguna vez hay una razón para incluir la línea de shebang en los paquetes de Perl?

Sin embargo, todavía tenía curiosidad si las personas pudieran incluirlo por alguna otra razón que todavía no conozco. O si tal vez podría haber algo así como una razón (por ejemplo) ~ 'histórica' para incluirlo. ¿O la línea shebang nunca debería incluirse en archivos .pm (punto) por temor a que explote mi casa?

+0

El único uso que puedo pensar es en alguien pero algunas pruebas en módulos que se ejecutan ejecutando el módulo como un script. – ikegami

Respuesta

7

No. Un shebang marca un archivo como ejecutable, y un módulo generalmente no es ejecutable.

En general, hay excepciones. Python tiene una expresión idiomática para detectar si el archivo actual es el invocado por el intérprete, y algunos módulos lo utilizan para ejecutar sus pruebas unitarias cuando se invoca de forma independiente. Esto no es común en la comunidad de Perl, donde tiene archivos adicionales de prueba de unidad incluidos con el módulo en CPAN.

Por lo tanto, incluso con esta posible excepción en mente, no consideraría un buen estilo incluir un shebang en un archivo de módulo que no se debe ejecutar directamente.

+1

Hay excepciones. Por ejemplo [App :: Module :: Lister] (https://metacpan.org/module/App::Module::Lister). –

4

La respuesta corta es NO, pero no hay una respuesta correcta o incorrecta.

El objetivo del shebang es informar al sistema operativo dónde está el intérprete. No es necesario agregarlo a ningún archivo Perl (secuencia de comandos o módulo). Y en Windows se ignora de todos modos **.

Más específicamente, en la mayoría de los casos no hay ninguna razón para agregarlo a un módulo, a menos que haya algún motivo por el cual desee ejecutar ese módulo directamente. Un módulo de Perl es realmente solo un script de Perl de todos modos, con un comando 'paquete' en la parte superior.

De cualquier manera, no le hará daño si está allí, pero en la mayoría de los casos no tiene sentido.

** Independientemente de cómo se inicie Perl, siempre buscará en el shebang los conmutadores de línea de comandos. Esto incluso se aplica a Windows, donde el sistema operativo no busca la línea shebang, pero cuando Perl escanea el archivo, lo hará. Ver http://perldoc.perl.org/perlrun.html.

+0

¿Hay algún problema si un módulo tiene una línea shebang que apunta al lugar equivocado, p. Versión inexistente o incorrecta del intérprete de Perl Si es así, esa sería otra razón para no hacer esto. –

+0

Una línea shebang inválida dará como resultado un error 'intérprete no encontrado' si intentas ejecutarlo. – tripleee

+0

@Stuart R. Jefferys, sin problemas. Si no intentas ejecutar el módulo, se ignorará el shabang. – ikegami

Cuestiones relacionadas