2011-06-10 17 views
16

Estoy aprendiendo a escribir aplicaciones CGI con Perl - Kevin Meltzer. Brent Michalski

secuencias de comandos en el libro en su mayoría comienzan con esto:

#!"c:\strawberry\perl\bin\perl.exe" -wT 
# sales.cgi 
$|=1; 
use strict; 
use lib qw(.); 

Cuál es la línea de $ | = 1; Cómo espaciarlo, ej. $ | = 1; o $ | = 1; ? ¿Por qué poner el uso estricto; después de $ | = 1; ?

Gracias

+9

Escritura de aplicaciones CGI con Perl es un buen libro, pero muy, muy (10 años!) De edad. Las mejores prácticas y el ecosistema del lenguaje han evolucionado mucho en ese momento, asegúrese de leer también material reciente, buscar "perl moderno" o "perl de aprendizaje" – mirod

+3

@mirod Solo para proporcionar el enlace faltante a [Perl moderno en github] (https://github.com/chromatic/modern_perl_book) ya que aún está activo y se actualiza de vez en cuando. – mbx

+0

@mirod ahora me hiciste nostálgico ... 1995, utilicé 'Netscape for the Macintosh', y podría caber en un disquete de 1,44mb. ;) – TLP

Respuesta

22

perlvar es tu amigo. Documenta todas estas variables especiales crípticas.

$ OUTPUT_AUTOFLUSH (alias $ |):

Si se establece en cero, obliga a una escalera de inmediato y después de cada escritura o impresión en el canal de salida seleccionado. El valor predeterminado es 0 (independientemente de si el canal está realmente amortiguado por el sistema o no; $ | le dice solo si le pidió a Perl que se vaciara de forma explícita después de cada escritura). STDOUT normalmente será un buffer de línea si la salida es para el terminal y bloqueará el buffer de lo contrario. La configuración de esta variable es útil principalmente cuando está produciendo en un conducto o socket, como cuando está ejecutando un programa Perl bajo rsh y desea ver el resultado mientras está sucediendo. Esto no tiene ningún efecto en el almacenamiento en búfer de entrada. Ver getc para eso. Vea seleccionar sobre cómo seleccionar el canal de salida. Ver también IO :: Handle.

Mnemónico: cuando desee que sus tuberías estén bien calientes.

Happy coding.


Para las otras preguntas:

No hay ninguna razón por la que viene después use strict;$|, excepto por la convención de programadores. $| y otras variables especiales no se ven afectadas por el estricto de esta manera. El espaciado tampoco es importante; solo elija su convención y sea consistente.(Prefiero espacios.)

17

$| = 1; obliga a un rubor después de cada escritura o impresión, por lo que la salida aparece tan pronto como se genera en lugar de ser amortiguada.

Consulte la documentación de perlvar.

$| es el nombre de una variable especial. No debe introducir un espacio entre $ y |.

Si utiliza el espacio en blanco alrededor del = o no le importa a Perl. Personalmente, creo que usar espacios hace que el código sea más legible.

Por qué la use strict; viene después $| = 1; en el script no sé, a excepción de que son tanto el tipo de cosas que había puesto en lo más alto, y hay que ponerlas en una orden o el otro. No creo que importe lo que ocurra primero.

7

No importa en qué lugar de su secuencia de comandos ponga una declaración use, porque todas se evalúan en tiempo de compilación.

$| es la variable incorporada para autoflush. Estoy de acuerdo en que en este caso, es ambiguo. Sin embargo, un $ solitario no es una declaración válida en perl, por lo que mediante un proceso de eliminación, podemos decir lo que debe significar.

use lib qw(.) parece una tontería, ya que "." ya está en @INC de forma predeterminada. Quizás es debido a que el libro es viejo. Esta afirmación le dice a Perl que agregue "." a la matriz @INC, que es el "entorno de ruta" para perl, es decir, donde busca módulos y tal.

+2

** No importa en qué parte del script coloque una declaración de uso **: No completamente cierto: 'use strict' es uno de muchos * lexical * pragmas. Si tiene 'blah blah {use strict; blarg blarg} blah blah' en tu script, solo el "blarg blarg" estará cubierto por el estricto pragma. – daotoad

+0

en modo de eliminación elimina el directorio de trabajo actual de @INC, por lo que debe agregarlo de nuevo al módulo mediante el uso de lib qw (.) – Weiyan

Cuestiones relacionadas