#! /usr/bin/perl -w
use strict;
use Benchmark;
my @a = (1..500000);
use Inline C => <<'ADDUP_END';
double addup( SV* stub, ... ) {
double total = 0;
int i;
Inline_Stack_Vars;
for( i = 0; i < Inline_Stack_Items; ++i ) {
total += SvNV(Inline_Stack_Item(i));
}
return total;
}
ADDUP_END
timethese shift || 100, {
'$_' => sub {
my $count = 0;
foreach( @a ) {
$count += $_;
}
},
'my' => sub {
my $count = 0;
foreach my $var( @a ) {
$count += $var;
}
},
'Inline' => sub {
my $count = addup( @a );
},
};
now I see around a 7% gain in favour of lexicals (i.e., barely above the noise level). It's not the 25% I was expecting. Heh, the Inline method is close to an order of magnitude faster! update: tip o' the hat to Hofmator for spotting an orphan $rec.
update 2001-08-06: in my travels through the older nodes in the monastery, I encountered another thread that deals with a similar topic: is 'my' that much faster than 'local'?. It may be of interest.
--g r i n d e r
|