2012-02-16 12 views
9

En un script como el siguiente, ¿es posible sin soltar 'my' para declarar efectivamente 'var' una sola vez y tenerlo visible fuera del bloque BEGIN?Declaración de la variable en el bloque BEGIN

echo -e "\n\n\n" | \ 
    perl -lne 'BEGIN { my $var="declared & initialized once" } print $var' 

Además, ¿por qué declarar var sin 'my' lo hace visible fuera del bloque BEGIN?

Respuesta

12

Coloque un my $var; antes del bloque BEGIN:

$ perl -le 'my $var; BEGIN { $var = "declared"; } print $var;' 
declared 

my indica el ámbito léxico variable, por lo $var no está definido en su ejemplo fuera del bloque BEGIN. Eliminar el my lo convierte efectivamente en una variable global, a la que se puede acceder a través del script después de la asignación.

+0

La orden de compilación me desconcierta un poco. Como $ var se declara primero en el bloque BEGIN, ¿por qué no se borra la declaración con 'my' más tarde? –

2

Además, ¿por qué declarar var sin 'my' lo hace visible fuera del bloque BEGIN?

Usted no lo está declarando en ese momento. Se autodeclara como global, si no está usando use strict (lo que impide la declaración por defecto). En un trazador de líneas, strict duele más de lo que ayuda; Estoy perfectamente bien con no hacer una declaración en ese contexto.

Cuestiones relacionadas