Sigo viendo la palabra clave "mi" delante de los nombres de las variables en los scripts de Perl de ejemplo en línea, pero no tengo idea de lo que significa. Intenté leer las páginas del manual y otros sitios en línea, pero tengo dificultades para discernir para qué sirve dada la diferencia entre cómo veo que se usa y el manual.
Por ejemplo, se usa para obtener la longitud de la matriz en esta publicación: Encuentre el tamaño de una matriz en Perl
Pero el manual dice:
A my declara que las variables enumeradas son locales (léxicamente) al bloque, archivo o evaluación adjunto. Si se incluye más de un valor, la lista debe colocarse entre paréntesis.
¿Qué hace y cómo se usa?
perl
scope
declaration
Puño de la furia
fuente
fuente
my
no tuvo en cuenta en lo más mínimo. Es el operador de asignación escalar (=
) que aplicó el contexto escalar en@arr
.Respuestas:
my
restringe el alcance 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 gran cantidad de beneficios derivados.Si no declara una variable mediante
my
, se creará una variable global en su lugar. Esto debe evitarse. El usouse strict;
le dice a Perl que desea evitar la creación implícita de variables globales, por lo que siempre debe usaruse strict;
(yuse warnings;
) en sus programas.Lectura relacionada: ¿Por qué usar
use strict;
yuse warnings;
?fuente
var
ylet
en JavaScript. Sin'use strict';
JS le permitirá declarar nuevas variables globales sin ninguna de las palabras clave, lo que no se considera la mejor práctica.let
yvar
qué hace y cómo se deben utilizar?" Y sí, la respuesta sería aproximadamente la misma. (Laslet
vars de JS son muy parecidas a lasmy
vars de Perl , excepto que laslet
vars no se pueden capturar)use strict;
? Pero esa no era la cuestión, yuse strict;
hace más que eso. O tal vez quisiste comunicar quemy
limita el alcance de las vars comolet
yvar
hacer, pero esa es prácticamente la primera oración de la respuesta. 3) Si desea responder una pregunta de manera diferente, para eso están las Respuestas.Resumen rápido:
my
crea una nueva variable,local
modifica temporalmente el valor de una variableEn 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 ámbito en el que existe.Fuente: http://www.perlmonks.org/?node_id=94007
Actualizar
Sobre la diferencia entre
our
ymy
por favor vea(Gracias a ThisSuitIsBlackNot ).
fuente
their
?our
: stackoverflow.com/questions/845060/…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.
fuente