Ответ 1
Это связано с тем, что map() делает сглаживание (по существу, используя цикл for()
). Что происходит, так это то, что isf используется в контексте l-value и, следовательно, становится авто-vivified.
В вашем предыдущем примере вы пытаетесь использовать isf непосредственно в контексте r-значения, поэтому он генерирует ошибку (потому что не происходит автоматическое оживление).
Вы можете упростить свой тест, чтобы использовать for()
, и получите тот же результат, что и с map()
:
use warnings;
use strict;
my $x;
for (@{ $x }){
print "$_\n";
}
... нет вывода.
Чтобы визуально увидеть, что $x
был автоматически оживлен как ссылка на массив, вы можете использовать функцию ref():
my $x;
my @a = map $_, @{ $x };
print ref $x;
Вывод:
ARRAY