IMHO, yes. The for version doesn't build a
(possibly huge) list of the form ("x",1,"y",1,...) and
then populate the hash; it just populates the hash.
I suspect my "slice" version is the fastest... and:
use Benchmark;
@arr=('file.html')x1024;
timethese( -3, {
'Slice' => '%x=();@x{@arr}=(1)x@arr',
'For' => '%x=();for(@arr){$x{$_}=1}',
'Map' => '%x=map{$_=>1}@arr'
} );
__END__
Benchmark: running For, Map, Slice, each for at least 3 CPU seconds...
For: 3 secs (3.13 usr + 0.00 sys = 3.13 CPU) @ 707.72/s (n=2218)
Map: 3 secs (3.14 usr + 0.00 sys = 3.14 CPU) @ 96.98/s (n=305)
Slice: 4 secs (3.14 usr + 0.00 sys = 3.14 CPU) @ 1074.72/s (n=3380)
...it is (for at least one case). So "slice" is 50% faster
than "for" which is much faster than "map" (with
tilly's patch, "map" will probably still be slower than
the others, but not nearly that slow).
-
tye
(but my friends call me "Tye") |