вот например, я тут тестировал на днях:
Benchmark: timing 10 iterations of FOREACH, MAP...
FOREACH: 18 wallclock secs (18.01 usr + 0.00 sys = 18.01 CPU) @ 0.56/s (n=10)
MAP: 1 wallclock secs ( 1.81 usr + 0.00 sys = 1.81 CPU) @ 5.52/s (n=10)
s/iter FOREACH MAP
FOREACH 1.80 -- -90%
MAP 0.181 895% --
Вроде бы судя по тестам конструкция с map намного предпочтительней...
А вот код:
#!/usr/bin/perl -w
use Benchmark;
#---------------------------
#Green Kakadu map vs foreach
#---------------------------
@array=();
@t=();
$array[0]=undef;
for my $i (1..10000){
push @array, $i;
}
Benchmark::cmpthese (10, {
\'FOREACH\' => sub {&classic},
\'MAP\' => sub {&map_me},
});
sub classic {
#--------------------------------------
foreach my $i (@array){
push @t, $i if defined $i;
}
undef @t;
}
sub map_me {
#--------------------------------------
map{ push @t, $_ if defined $_} @array;
undef @t;
#хотя тут стоило бы написать более корректно:
#@t=map{$_ if defined $_} @array;
}