in reply to ${Schwartzian transform} ?
Perhaps because it's not clear how much a win this will be?
Copying a scalar requires making a new scalar. Making a ref
also requires making a new scalar. There might be a small
win, but it's probably dwarved by the expensive_func call.
The following benchmark shows that the gain is small:
#!/usr/bin/perl use strict; use warnings; use Benchmark qw /cmpthese/; our @array = map {sprintf "aaa:%03d" => $_} 0 .. 999; our (@a, @b); for (my $i = @array; -- $i;) { my $j = rand ($i + 1); @array [$i, $j] = @array [$j, $i]; } cmpthese -5 => { ST => '@::a = map {$_ -> [0]} sort {$a -> [1] <=> $b -> [1]} map {[$_ => substr $_, 4]} @array', Liz => '@::b = map {${$_ -> [0]}} sort {$a -> [1] <=> $b -> [1]} map {[\$_ => substr $_, 4]} @array', }; foreach my $i (0 .. 999) { die unless $a [$i] eq $b [$i]; } __END__ Benchmark: running Liz, ST for at least 5 CPU seconds... Liz: 5 wallclock secs ( 5.31 usr + 0.00 sys = 5.31 CPU) @ 10 +2.45/s (n=544) ST: 5 wallclock secs ( 5.37 usr + 0.00 sys = 5.37 CPU) @ 10 +5.40/s (n=566) Rate Liz ST Liz 102/s -- -3% ST 105/s 3% --
Although you might know cases where there is a bigger gain.
Abigail
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Re: ${Schwartzian transform} ?
by liz (Monsignor) on Sep 18, 2003 at 12:22 UTC | |
by Abigail-II (Bishop) on Sep 18, 2003 at 12:44 UTC | |
by sfink (Deacon) on Sep 19, 2003 at 17:04 UTC |
In Section
Meditations