• Publicidad

Línea inicial !/usr/bin/perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Línea inicial !/usr/bin/perl

Notapor noa86 » 2011-02-17 16:24 @725

Hola, estoy buscando en foros pero no encuentro la solución a mi duda.

Es simple: ¿alguien me puede decir la diferencia entre poner

!/usr/bin/perl o poner

!/usr/bin/perl -w -T

?


¿Qué significa -w -T?

Y ¿cuál es la diferencia entre un archivo con extensión cgi o pl? ¿Da lo mismo una que otra? ¿Realizan las mismas funciones?
noa86
Perlero nuevo
Perlero nuevo
 
Mensajes: 93
Registrado: 2010-11-15 14:43 @655

Publicidad

Re: Línea inicial !/usr/bin/perl

Notapor explorer » 2011-02-17 16:58 @748

La línea

#!/usr/bin/perl

se llama la línea shebang.

* Para Perl, esa línea no significa nada, ya que es un comentario (empieza por '#').

* Para Windows, tampoco significa nada (sigue siendo un comentario).

* Para UNIX/Linux, sí que tiene significado: es la ruta completa al intérprete o programa que es capaz de entender lo que sigue (en las líneas siguientes).

De esta manera, desde el shell, en lugar de tener que escribir

perl programa.pl

solo tenemos que darle permisos de ejecución al programa.pl. Y a continuación escribir

./programa.pl

El shell mirará qué tipo de fichero es, mirando la línea shebang, y ejecutará el intérprete indicado así:

/usr/bin/perl programa.pl

Las opciones que siguen a la ruta se mandan también en la ejecución del intérprete:

#!/usr/bin/perl -w -T programa.pl

se transforma en

/usr/bin/perl -w -T programa.pl


El significado de las opciones la tienes en perldoc perlrun. En el caso que planteas:

-w : activa los avisos. Perl te avisará de cualquier cosa extraña que encuentre

-T : activa modo contaminado. En este modo de funcionamiento, Perl rehusará el utilizar de forma directa la entrada proveniente del usuario, y activará otras medidas de control. Esto sirve para blindar los CGI (por ejemplo), ante intentos de entradas contaminadas por parte de los usuarios (y sobre todo, hackers).

En cuanto a las extensiones de los ficheros, .cgi y .pl

* No tiene ningún significado para Perl. A Perl solo le importa el contenido.

* Tampoco significa nada para UNIX/Linux. Al shell solo le importa la línea shebang.

* Si que tiene importancia para Windows y para los programas que necesitan ejecutar programas Perl. Por ejemplo, los servidores web pueden tener configurado que permiten la ejecución de todos los ficheros que acaben en .cgi. Para Windows es importante, porque este sistema operativo asocia la extensión del fichero con el intérprete o programa que debe lanzar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Línea inicial !/usr/bin/perl

Notapor pvaldes » 2011-02-18 06:36 @317

No se me ocurre una forma mejor de explicarlo. De todos modos me gustaría remarcar algo ya dicho: ni !/usr/bin/perl ni tampoco !usr/bin/perl -w -T son expresiones válidas, les falta el #, y esto es extensible a cualquier script de bash que estés realizando o tengas ahora mismo en mente.

Y añado que para darle permisos de ejecución al script necesitas escribir el comando siguiente:

chmod u+x programa.pl

y que para averiguar qué opciones están disponibles para un programa determinado en Linux tienes el comando

info nombre_del_programa

y para información específica sobre Perl y las opciones que admite tienes perldoc.
pvaldes
Perlero nuevo
Perlero nuevo
 
Mensajes: 129
Registrado: 2011-01-22 12:56 @580

Re: Línea inicial !/usr/bin/perl

Notapor salva » 2011-02-18 11:53 @537

explorer escribiste:La línea

#!/usr/bin/perl

se llama la línea shebang.

* Para Perl, esa línea no significa nada, ya que es un comentario (empieza por '#').

¡Bueno, eso no es del todo cierto! El intérprete de Perl sí mira esa línea por los argumentos que pueda llevar.

Cuando tenemos un script con permisos de ejecución (típicamente 0755) y lo llamamos como...

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ script.pl
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


... es el propio sistema operativo el que procesa el shebang y llama al intérprete de Perl con los argumentos incluidos en la misma.

Pero si en cambio llamamos al script incluyendo explícitamente el intérprete de Perl...

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
$ perl script.pl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


... en este caso el sistema operativo ignora el shebang con cualquier argumento incluido en el mismo.

Para evitar que según cómo se llame el script, éste cambie su comportamiento, en el segundo caso, el propio interprete parsea el shebang y tiene en cuenta los argumentos incluidos igual que si se le hubiesen pasado por la línea de comandos.

Incluso hay algunos flags (por ejemplo, -C) que si se incluyen en el shebang, hacen que perl aborte la ejecución cuando el script se llama de la segunda manera porque considera que ya es demasiado tarde para hacerles caso.
Avatar de Usuario
salva
Perlero nuevo
Perlero nuevo
 
Mensajes: 200
Registrado: 2008-01-03 15:19 @680


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 34 invitados