Я думаю, глядя на perlref , что это ожидаемое поведение:
" Ссылки соответствующего типа могут возникать, если вы разыменовываете их в контексте, который предполагаетони существуют."
То же, что и в foreach, происходит с push () и друзьями:
my $f;
push @$f, 1;
say @$f;
Хотя не с новым, можно просто взять ссылкуверсии:
my $f = [];
push $f, 1;
say @$f;
работает, в то время как
my $f;
push $f, 1;
say @$f;
нет, что я считаю разумным, так как push не знает, что вы на самом деле имели в виду.
ИнтересноеВопрос в том, должен ли скаляр (@ $ undef) делать то же самое или должен предупреждать, так как он в конечном итоге возвращает undef, я думаю, что он может также сразу предупредить.