Estoy usando el mapa para extraer el primer elemento de una matriz 2D. Aquí está el pequeño fragmento de código.entendiendo este comportamiento de mapa
my $array = [ [1,11,111], [2,22], undef, [4] ];
my @firstList = map { (defined $_) && $_->[0] } @$array;
Así que aquí estoy esperando el mapa para devolver una matriz que tiene elementos con valor de alguno de los elementos o undef primer elemento de $ de matriz.
pero la salida no es la misma que estoy esperando. Para undef, obtengo un elemento de tipo 'escalar'.
Si cambio la instrucción del mapa con el siguiente bloque, entonces estoy obteniendo el resultado esperado.
my @firstList = map { $_->[0] } @$array;
Por favor, ayúdame a entender acerca de estas dos afirmaciones mapa.
Una pequeña corrección: 'undef' definido devuelve' '' '. – Dallaylaen
Me preguntaba por qué undef -> [0] funciona (incluso bajo 'strict'). Resulta que está [autovivificado] (http://en.wikipedia.org/wiki/Autovivification), es decir, establecido implícitamente en '[]' ** en la matriz original **. – Dallaylaen
@Dallaylaen: esto hace que suficientes personas conozcan que CPAN tiene un módulo de "autovigilancia" en http://search.cpan.org/perldoc?autovivification que le permite desactivarlo con el comando 'no autovivification;' –