[Perl] Re: Perl digest, Vol 1 #259 - 1 msg
Luis Rodrigo Gallardo Cruz
lgallardo@computacion.cs.cinvestav.mx
18 Nov 2002 11:06:37 -0600
El lun, 18-11-2002 a las 07:16, Ren=C8 Morales D. escribi=F3:
> >cuando pones my $variable o my @variable o my %variable es una forma de
> >declarla de maner local. Aunque la uses en todo el script.
>=20
> pero de que me sirve espec=EDficamente. hasta el momento s=F3lo se me ocu=
rre
> que es para poder utilizar un nombre de variable, para dos variables dent=
ro
> del programa.
>=20
> =BFcu=E1l es la ventaja de utilizar my?, =BFen vez de nombrar a "esta" de=
otra forma.?
> me refiero sin my, o local
Cuando usas my estas declarando la variable como local al grupo en el
que te encuentras. (Un grupo es una secci=F3n de c=F3digo entre { ... }. M=
=E1s
o menos) Eso quiere decir que si fuera del grupo hay otra variable del
mismo nombre, la local toma precedencia. Por ej.
$var =3D 1;
{
my $var =3D 2;
print $var;
}
print $var.
El primer print imprime "2", y el segundo "1". La variable declarada con
my solo existe dentro del grupo.
=BFY de que sirve declarar con my una variable global?, preguntar=E1s.
Si declaras con my una variable fuera de cualquier grupo, la variable es
local al archivo. Esto te permite importar otros archivos sin que los
nombres choquen.
Y el uso m=E1s importante, probablemente: Si al principio de tu script
pones
use strict;
Perl esencialmente prohibe el uso de variables globales (perd=F3n a los
que saben, por decirlo as=ED). En este caso, la =FAnica manera de usar una
variable es que haya sido declarada con my. Y esto evita errores tontos
como:
$variable =3D 1;
... muchas l=EDneas despu=E9s ...
if ($variabla =3D=3D 1) { bla, bla }
En este caso, si usas 'use strict' y declaras 'my $variable', el
compilador se va a quejar de que en el if usas una variable no
declarada. Sin el 'use strict' Perl simplemente declara una nueva
variable, con valor 'undef'.
Espero te sirva la explicaci=F3n.
Ah, s=ED, el 'local'. Mejor no lo uses. A menos que lo copies de alg=FAn
ejemplo, o que tu experiencia previa programando sea en Lisp, TeX o
PostScript. 'local' hace que las variables tengan alcance din=E1mico, que
es una cosa rara que casi nadie entiende, por lo menos no a la primera.
--=20
Rodrigo
PGP key 1024D/ADC9BC28 2002-02-26 [expires 2004-02-26]
Fingerprint: 7C81 E60C 442E 8FBC D975 2F49 0199 8318 ADC9 BC28