Página 1 de 1

¿Cómo saber si una variable dada $var es un hash?

NotaPublicado: 2006-10-11 02:22 @140
por fgalves
Hola a todos.

¿Existe algún método para averiguar si mi variable $var en realidad contiene un hash en su interior?
Algo como:
Código: Seleccionar todo
if hash($var)....

Muchas gracias
Felipe

NotaPublicado: 2006-10-11 04:15 @219
por explorer
Sí, usando la función ref:
Código: Seleccionar todo
explorer@casa:~> perl -le '$x = { casa => "Lola" }; print ref $x'
HASH

NotaPublicado: 2006-10-11 04:24 @225
por fgalves
Entonces supongo que es viable una verificación del tipo
Código: Seleccionar todo
if (ref $x == "HASH") .....

¡¡Muchas gracias de todos modos!!

NotaPublicado: 2006-10-11 04:26 @227
por explorer
NOOO... En Perl se usa 'eq' para hacer comparación de cadenas de texto. El '==' está reservado sólo para comparar números.

Por favor, sigue el enlace que te he dado, a ref...

¡¡¡Gracias!!!

NotaPublicado: 2006-10-11 06:40 @319
por fgalves
¡¡¡Gracias!!!
Disculpa las molestias pues soy realmente novato en Perl.
Cordialmente,
Felipe

NotaPublicado: 2006-10-11 10:21 @473
por fgalves
Una pregunta más a añadir. Ahora ya sé que $var contiene una referencia a un HASH. ¿Cómo hacer para asignar $var a una variable de tipo hash (%hash en el ejemplo)? El código más abajo me da un error:
Código: Seleccionar todo
"Reference found where even-sized list expected at ... line ..."


Gracias de antemano

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
 if (ref($value) eq "HASH")
{
    %hash = $value;
     ....
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

NotaPublicado: 2006-10-11 10:31 @480
por kidd
Hola:

La variable que estás recibiendo realmente es una referencia a un hash, por lo que para poder asignarga debes de-referenciarla:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my %hash = %{$value};
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Saludos

NotaPublicado: 2006-10-11 10:38 @485
por fgalves
¡¡¡Muchas gracias Kidd!!!
¡¡¡Gracias por vuestra ayuda y muchas felicidades por la pagina!!! ¡Realmente muy util para gente como yo!
Saludos!