Identificando un referente ref

La función ref devuelve un string que indica el tipo del referente:
 
$ra = \$a;  # referencia a escalar
$rb = \@b;  # referencia a arreglo
$rc = \%c;  # referencia a hash
$rx = \$rb; # referencia a referencia
$rf = \&f;  # referencia a función

ref ( $ra ); #  devuelve "SCALAR"
ref ( $rb ); #  devuelve "ARRAY"
ref ( $rc ); #  devuelve "HASH"   
ref ( $rx ); #  devuelve "REF"   
ref ( $rf ); #  devuelve "CODE"
Si el operando de ref no es una referencia, ref devuelve undef.

ref sobre Referencias a Objetos

Sobre referencias a objetos (véase 6), ref devuelve el nombre de la clase:

$obj  = bless {}, "Foo";
$type = reftype $obj;    # "Foo"

ref y la Coomprobación de Tipos

La función ref puede ser utilizada para mejorar los mensajes de error:

die "Expected scalar reference" unless ref($slr_ref) eq "SCALAR";

Evaluación de ref en un Contexto de Cadena

Si una referencia es utilizada en un contexto donde se espera una cadena, la función ref es llamada automáticamente produciendo una representación hexadecimal de la dirección del referente. Eso significa que una impresión como:

print $hsh_ref,"\n";
produce algo como esto:
HASH(0X10027588)

La Función reftype

La función reftype de Scalar::Util funciona de manera parecida a ref EXPR, con la diferencia de que sobre los objetos no retorna la clase del objeto:

$type = reftype "string";           # undef
$type = reftype \$var;              # SCALAR
$type = reftype [];                 # ARRAY

$obj  = bless {}, "Foo";
$type = reftype $obj;               # HASH



Subsecciones
Casiano Rodríguez León
2009-10-04