Glenn Linderman wrote:

> On approximately 4/19/2006 5:42 PM, came the following characters from 
> the keyboard of Sisyphus:
> 
>>----- Original Message ----- 
>>From: "Glenn Linderman"
>>.
>>.
>>
>>>I think that the
>>>
>>>for( grep ($_ != 3, @a))
>>>
>>>is quite clear in bundling the element selection together, and
>>>separating it from the functions being performed.
>>>
>>
>>I would much rather see (as suggested earlier on in this thread):
>>
>>for(@a) {
>>     next if $_ == 3;
>>
>>For me it is both clearer and more efficient ... but each to his own.
>>
>>On the subject of replacing brackets with modifiers (which I think was also
>>raised earlier on), I was surprised to find that using a modifier is about
>>25% faster than brackets:
>>
>>
>>### try.pl ###
>>use warnings;
>>no warnings "once";
>>use Benchmark;
>>
>>@x = (1 .. 1000000);
>>@y = (1 .. 1000000);
>>
>>$z1 = 0;
>>$z2 = 0;
>>
>>timethese(1, {
>>'modifier' => 'for(@x) {$z1++ if $_ != 3}',
>>'brackets' => 'for(@y) {if($_ != 3){$z2++}}',
>>});
>>
>>print "\n", $z1, " ", $z2, "\n";
>>__END__
>>
>>D:\pscrpt>perl try.pl
>>Benchmark: timing 1 iterations of brackets, modifier...
>>  brackets:  1 wallclock secs ( 1.03 usr +  0.00 sys =  1.03 CPU) @  0.97/s
>>(n=1)
>>            (warning: too few iterations for a reliable count)
>>  modifier:  1 wallclock secs ( 0.70 usr +  0.00 sys =  0.70 CPU) @  1.43/s
>>(n=1)
>>            (warning: too few iterations for a reliable count)
>>
>>999999 999999
>>
>>Maybe I've misinterpreted the results ??
>>
>>Cheers,
>>Rob
> 
> 
> I get similar, but I guess my new computer is faster than yours, so I 
> did 10 iterations... and got 3.77 for brackets, and 2.44 for modifier. 
> Both your number and mine are closer to 30% than 25% faster.  Interesting.
> 
> Get a load of this variation:
> 
> perl
> use warnings;
> no warnings "once";
> use Benchmark;
> 
> @x = (1 .. 1000000);
> @y = (1 .. 1000000);
> @z = (1 .. 1000000);
> @w = (1 .. 1000000);
> 
> $z1 = 0;
> $z2 = 0;
> $z3 = 0;
> $z4 = 0;
> 
> timethese(10, {
> 'forgrep' => 'for(grep($_ != 3, @w)){ $z4++ }',
> 'next' => 'for(@z) {next if $_ == 3; $z3++}',
> 'brackets' => 'for(@y) {if($_ != 3){$z2++}}',
> 'modifier' => 'for(@x) {$z1++ if $_ != 3}',
> });
> 
> print "\n", $z1, " ", $z2, " ", $z3, " ", $z4, "\n";
> __END__
> 
> Benchmark: timing 10 iterations of brackets, forgrep, modifier, next...
>    brackets:  4 wallclock secs ( 3.73 usr +  0.00 sys =  3.73 CPU) @ 
> 2.68/s (n=10)
>     forgrep:  3 wallclock secs ( 3.19 usr +  0.00 sys =  3.19 CPU) @ 
> 3.14/s (n=10)
>    modifier:  3 wallclock secs ( 2.61 usr +  0.00 sys =  2.61 CPU) @ 
> 3.83/s (n=10)
>        next:  3 wallclock secs ( 2.64 usr +  0.00 sys =  2.64 CPU) @ 
> 3.79/s (n=10)

Don't know how you could get that to run on only 10 iterations.

I ran 10 million iterations and got:

timethese (slight format mod to fit line):
Benchmark: timing 10000000 iterations of brackets, forgrep, modifier, next...
 brackets:  9 secs ( 4.91 usr + 0.00 sys = 4.91 CPU) @ 2037905.03/s (n=10000000)
  forgrep: 24 secs (12.20 usr + 0.00 sys = 12.20 CPU) @ 819470.62/s (n=10000000)
 modifier: 10 secs ( 4.80 usr + 0.02 sys = 4.81 CPU) @ 2077706.21/s (n=10000000)
     next: 10 secs ( 4.81 usr + 0.00 sys = 4.81 CPU) @ 2078137.99/s (n=10000000)

cmpthese 10000000:
              Rate  forgrep     next modifier brackets
forgrep   810110/s       --     -60%     -61%     -62%
next     2045408/s     152%       --      -1%      -4%
modifier 2071251/s     156%       1%       --      -3%
brackets 2133561/s     163%       4%       3%       --


> 9999990 9999990 9999990 9999990
> 
> 
> 
> I have to admit that if the complexity of the filter expression was more 
> than one comparison or match, that I'd rather see them in the body of 
> the loop, too.  But for one comparison, I kind of like the for-grep.
> 


-- 
  ,-/-  __      _  _         $Bill Luebkert    Mailto:[EMAIL PROTECTED]
 (_/   /  )    // //       DBE Collectibles    Mailto:[EMAIL PROTECTED]
  / ) /--<  o // //      Castle of Medieval Myth & Magic http://www.todbe.com/
-/-' /___/_<_</_</_    http://dbecoll.tripod.com/ (My Perl/Lakers stuff)
_______________________________________________
Perl-Win32-Users mailing list
Perl-Win32-Users@listserv.ActiveState.com
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs

Reply via email to