Autovivificación

Se denomina Autovivificación o Autovivification a la creación automática de una referencia cuando una valor indefinido es de-referenciado. El siguiente ejemplo ilustra una autovivificación:

lhp@nereida:~$ perl -de 0
DB<1> $href->{Fruit}->{Bananas}->{Yellow} = "In Season"
DB<2> print "Red Apples are not in season.\n" unless exists $href->{Fruit}->{Apples}->{Red}
Red Apples are not in season.
DB<3> print $href->{Fruit}->{Apples}->{Red}

DB<4> print join "\n", keys %{$href->{Fruit}}
Bananas
Apples

Cuando un valor undef es de-referenciado siendo usado como lvalue se autovivifica:

>perl -Mstrict -wle 'my $r; my @x; @$r=@x; print "$r\n"' 
ARRAY(0x225280)
Es en cierto modo razonable, ya que si está en el lado izquierdo es que se le quiere definir. Esto no ocurre si se usa como rvalue:

>perl -Mstrict -wle 'my $r; my @x; @x=@$r; print "$r\n"' 
Can't use an undefined value as an ARRAY reference at -e line 1.

Distinguir cuando una expresión esta siendo usada como rvalue o lvalue puede ser sutíl. Por ejemplo:

  DB<1> x use strict; my $r = undef; my @x = map{ $_ } @{ $r }
  empty array

Casiano Rodríguez León
Licencia de Creative Commons
Principios de Programación Imperativa, Funcional y Orientada a Objetos Una Introducción en Perl/Una Introducción a Perl
por Casiano Rodríguez León is licensed under a Creative Commons Reconocimiento 3.0 Unported License.

Permissions beyond the scope of this license may be available at http://campusvirtual.ull.es/ocw/course/view.php?id=43.
2012-06-19