perl

perl - ¿Por qué map() enmascara el error ''valor indefinido''?



(1)

Esto se debe a la forma en que map() realiza el aliasing (esencialmente utiliza un bucle for() ). Lo que está sucediendo es que el aref se está utilizando en el contexto de valor l y, por lo tanto, se está auto-vivified .

En su ejemplo anterior, está intentando usar el aref directamente en el contexto de valor r, por lo que genera el error (porque no se produce una vivificación automática).

Puede simplificar su prueba para usar for() , y obtendrá el mismo resultado que con map() :

use warnings; use strict; my $x; for (@{ $x }){ print "$_/n"; }

...ninguna salida.

Para ver visualmente que $x se vivificó automáticamente como una referencia de matriz, puede usar la función ref() :

my $x; my @a = map $_, @{ $x }; print ref $x;

Salida:

ARRAY

Me pregunto por qué una llamada a un map en el segundo fragmento hace que el error de "valor indefinido" se haya ido.

use strict; use warnings; my $x; my @a = @{ $x }; # error: Can''t use an undefined value as an ARRAY reference

Comparar con:

use strict; use warnings; my $x; my @a = map $_, @{ $x }; # no error, @a is empty