と思ったのだが、最後の式がサブルーチンの値になってしまうので
mapの値はいらないことが処理系にわかるように少し直して

use Benchmark qw(:all);

@a = (1..1000);

timethese(100000, {
sum_foreach => sub {
my $sum;
for (@a) { $sum += $_ }
$sum
},
sum_map => sub {
my $sum;
map { $sum += $_ } @a;
    $sum;
},
});

とすれば

Benchmark: timing 100000 iterations of sum_foreach, sum_map...
sum_foreach: 45 wallclock secs (44.25 usr + 0.00 sys = 44.25 CPU) @ 2259.89/s (n=100000)
sum_map: 43 wallclock secs (42.00 usr + 0.01 sys = 42.01 CPU) @ 2380.39/s (n=100000)

疑って悪かった。ごめんよ。