@temp_list = map { ...1... } ...2....;
print @temp_list;
? The map is done before print sees it, and print is only called once, with a list. It is slower, of course, because you do have an extra list-building step. Interestingly, it is not slower than map in a void context (I'm using 5.8.0 here -- when was that optimized?):
use Benchmark 'cmpthese';
my @vals = (10_000..15_000);
open(ABYSS, '>', '/dev/null') or die "The abyss is closed.\n";
cmpthese(-2, {
'map' => sub { print ABYSS map {">>$_<<\n"} @vals },
'map_void' => sub { map {print ABYSS ">>$_<<\n"} @vals },
'for' => sub { print ABYSS ">>$_<<\n" for @vals }
});
close ABYSS;
__END__
Rate map_void map for
map_void 11.9/s -- -23% -50%
map 15.5/s 30% -- -34%
for 23.6/s 99% 52% --
Caution: Contents may have been coded under pressure.
|