Да - или, по крайней мере, так я интерпретирую этот результат.
$ perl -e "map {0} <>" big_data_file
Out of memory!
$ perl -e "map {0} 1 .. 1000000000"
Out of memory!
Можно задаться вопросом, не хватает ли памяти, потому что Perl пытается сохранить вывод map
. Тем не менее, я понимаю, что Perl оптимизирован, чтобы избежать этой работы всякий раз, когда map
вызывается в пустом контексте. Для конкретного примера см. Обсуждение в этот вопрос .
Возможно, лучший пример :
$ perl -e "sub nothing {} map nothing(), <>" big_data_file
Out of memory!
Судя по комментариям, этот вопрос мотивирован стремлением к компактному синтаксису при обработке больших данных.
open(my $handle, '<', 'big_data_file') or die $!;
# An ordinary while loop to process a data file.
while (my $line = <$handle>){
foo($line);
}
# Here Perl assigns each line to $_.
while (<$handle>){
foo($_);
}
# And here we do the same thing on one line.
foo($_) while <$handle>;