[Perl] Creacion de variables
Gunnar Wolf
gwolf@campus.iztacala.unam.mx
Thu, 13 Dec 2001 17:16:22 -0600 (CST)
> Bueno, directo al grano..
> Tengo un archivo con una lista de nombres, p. ej.
>
> luis
> alberto
> raul
> pedro
> arturo
>
> Desde un programa en Perl, necesito abrir este archivo y crear un array
> asociativo con el nombre de cada uno de los nombres que aparecen en el
> archivo, es decir que debo tener los arreglos: %luis, %alberto, %raul,
> %pedro, %arturo
> Y se deben crear variables para c/u de los nombres que aparezcan en el
> archivo, de tal manera que si en el futuro se agregan mas nombres, el
> programa cree nuevas variables para cada nombre agregado.
> Intente hacer algo como:
>
> while(<archivo>) {
> $'$_'{'$_'}=3D"algun valor";
> }
>
> Pero no funciona.
> =BFAlguien sabe como hacer esto?
Podr=EDas hacerlo con eval:
while (my $nombre=3D<FILE>) {
chomp $nombre;
eval("\$$nombre{$nombre}=3D'alg=FAn valor';");
}
te crear=EDa:
%pedro =3D ('pedro' =3D> 'alg=FAn valor');
%luis =3D ('luis' =3D> 'alg=FAn valor');
etc.
Ahora, esto definitivamente no es elegante, ni demasiado seguro. Te
sugiero m=E1s bien usar una estructura m=E1s profunda - Lo primero que se m=
e
ocurre es un hash de arrays o un hash de hashes, dependiendo de lo que
quieras. Y yendo un paso m=E1s adelante, hasta te sugiero que sea una
referencia a un hash de hashes - muchas veces es m=E1s f=E1cil manejar a la
estructura completa como una variable escalar que como una lista o un
hash. Algo as=ED:
my ($datos);
while (my $nombre=3D<FILE>) {
chomp $nombre;
if (quieres_hash_de_hashes) {
$datos->{$nombre}{$nombre} =3D 'alg=FAn valor';
} elsif (quieres_hash_de_arrays) {
$datos->{$nombre}[0] =3D 'alg=FAn valor';
} elsif (quieres_un_simple_hash) {
$datos->{$nombre} =3D 'alg=FAn valor';
} else {
print "=BFPos qu=E9 fregaos quieres?\n";
}
}
PD - Como muestro en la =FAltima opci=F3n - =BFPor qu=E9 no usas un hash se=
ncillo?
Saludos!
--
Gunnar Wolf - gwolf@campus.iztacala.unam.mx - (+52-55)5623-1118