next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Paso de arrays y Sup: Referencias a variables ya Ant: Precedencias y prefijos Err: Si hallas una errata ...

La notación flecha

El acceso a los elementos de un hash o array a través de una referencia puede resultar incómodo, por eso Perl provee una sintáxis adicional:
$arr_ref = \@a;
$hsh_ref = \%h;
$sub_ref = \&s;
$a[0] = $hsh_ref->{"first"} # $a[0] = $h{"first"}
# o bien ...
$arr_ref->[0] = $h{"first"} # $a[0] = $h{"first"}

El operador -> toma una referencia a su izquierda y un índice o clave a su derecha, localiza el array o hash correspondiente y accede al elemento apropiado.

Analize el siguiente ejemplo:

  DB<1> @a = (1, 0, 0); @b = (0, 1, 0); @c = (0, 0, 1)
  DB<2> @m = \(@a, @b, @c)
  DB<3> p @m
ARRAY(0x810461c)ARRAY(0x8104790)ARRAY(0x810479c)
  DB<4> $rm = \@m
  DB<5> p $rm->[2]
ARRAY(0x810479c)
  DB<6> p @$rm->[2] # Lo mismo que: p @{$rm}->[2]
ARRAY(0x810479c)
  DB<7> p @{$rm->[2]}
001
  DB<8> p $rm->[1,2]
ARRAY(0x810479c)
  DB<9> p $rm->[1]->[1]
1
¿Puede explicar la conducta observada en p $rm->[1,2]? La razón es que el operador de flecha no funciona con trozos y la subexpresión 1,2 es evaluada en un contexto escalar.

El operador flecha puede aplicarse a referencias a subrutinas, de manera que en vez de escribir:

&{$sub_ref}($arg1, $arg2, $etc);

podamos escribir:

$sub_ref->($arg1, $arg2, $etc);


next up previous contents index practicapracticaPP2moodleLHPmoodlepserratacpanmodulospauseperlgoogleetsiiullpcgull
Sig: Paso de arrays y Sup: Referencias a variables ya Ant: Precedencias y prefijos Err: Si hallas una errata ...
Casiano Rodríguez León
2006-02-21