[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