[perl] como se usan los hash?

Raymond Hall kovalski@iris.razteca.org.mx
Thu, 29 Oct 1998 00:24:19 -0600 (EST)


On Tue, 27 Oct 1998, RUBEN wrote:

> llevo un rato peleandome con unos hashes. A ver si alguien sabe como
...
> un arreglo. He estado dando vueltas alrededor de algo como esto:
> 
> 	@arreglo_chido{'llave'} = (1,2,3,4,56);
> 
> pero cuando lo veo: 
> 
> 	@temp = @arreglo_chido{'llave'};print @temp;

* Solución rápida:

    $arreglo_chido{'llave'} = [(1,2,3,4,56)];
    @temp = @{$arreglo_chido{'llave'}};
    print @temp;

* Explicación:

    $arreglo_chido{'llave'} = [(1,2,3,4,56)];
    ^                        `-------v-------'                 
    |        Dado que un elemento del hash sólo puede ser un escalar
    |        lo que hacemos es asignarle un "arreglo anónimo", que en
    |        realidad lo que hace es "alocar" el espacio y regresarnos
    |        su dirección, es decir un puntero
    \
     `- nos estamos refiriendo a UN elemento del hash, por lo que lo
        accedemos con $ (dado que es un escalar)

Ahora bien, para acceder a este array tendrás que usar la sintaxis de perl
para indirección, que aunque parece tenebrosa es mucho más amigable que C.

El $i-ésimo elemento: $escalar = $arreglo_chido{'llave'}->[$i];
El array completo; @array = @{$arreglo_chido{'llave'}};
   **nótese lo que hicimos: @{ ...(algo que nos dá un -> a un array)... }
Una "rebanada": ($la,$mas,$sabrosa) = @{$arreglo_chido{'llave'}}[1-3];
...otra manera: @rebanada = @arreglo_chido{'llave'}->[2-3];

* Tip: man perlref, man perlsyn, man perlvar, man perldata

Saludos,
Raymond Hall
--
`` At one point, the President inserted a cigar into Ms. Lewinsky's
   vagina, then put the cigar in his mouth and said: "It tastes good." ''
						K. Starr

--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : cancelacion perl