perl scope declaration

¿Cómo debería usar la palabra clave "my" en Perl?



scope declaration (3)

Resumen rápido: my crea una nueva variable, local modifica temporalmente el valor de una variable

En el siguiente ejemplo, $ :: a se refiere a $ a en el espacio de nombres ''global''.

$a = 3.14159; { my $a = 3; print "In block, /$a = $a/n"; print "In block, /$::a = $::a/n"; } print "Outside block, /$a = $a/n"; print "Outside block, /$::a = $::a/n"; # This outputs In block, $a = 3 In block, $::a = 3.14159 Outside block, $a = 3.14159 Outside block, $::a = 3.14159

es decir, local cambia temporalmente el valor de la variable, pero solo dentro del alcance en el que existe.

Fuente: http://www.perlmonks.org/?node_id=94007

Actualizar

Sobre la diferencia entre our y my por favor vea

(Gracias a ThisSuitIsBlackNot ).

Sigo viendo la palabra clave "mi" delante de los nombres de las variables en las secuencias de comandos de Perl, por ejemplo, pero no tengo idea de lo que significa. Intenté leer las páginas del manual y otros sitios en línea, pero estoy teniendo dificultades para discernir para qué es, dada la diferencia entre cómo lo uso y el manual.

Por ejemplo, se usa para obtener la longitud de la matriz en esta publicación: Encontrar el tamaño de una matriz en Perl

Pero el manual dice:

A my declara que las variables enumeradas son locales (léxicas) al bloque, archivo o eval adjunto. Si se enumera más de un valor, la lista debe colocarse entre paréntesis.

¿Qué hace y cómo se usa?


Variables privadas a través de my () es la documentación principal para my .

En el ejemplo de tamaño de matriz que menciona, no se usa para encontrar el tamaño de la matriz. Se usa para crear una nueva variable para contener el tamaño de la matriz.


my restringe el scope de una variable. El alcance de una variable es donde se puede ver. Reducir el alcance de una variable a donde se necesita la variable es un aspecto fundamental de una buena programación. Hace que el código sea más legible y menos propenso a errores, y da como resultado una serie de beneficios derivados.

Si no declaras una variable usando my , se creará una variable global en su lugar. Esto debe ser evitado. Usando el use strict; le dice a Perl que no se le puede permitir la creación implícita de variables globales, por lo que siempre debe usar use strict; (y use warnings; ) en tus programas.

Lectura relacionada: ¿Por qué usar el use strict; y use warnings; ?