Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re^2: Why is "for" much slower than "while"?

by gam3 (Curate)
on Jan 20, 2010 at 13:59 UTC ( #818457=note: print w/ replies, xml ) Need Help??


in reply to Re: Why is "for" much slower than "while"?
in thread Why is "for" much slower than "while"?

I don't think this is the complete answer as

read $IN1, my $buffer, -s $IN1; ++$counts{$_} for split( /^/m, $buffer );
is faster than the for.
/dev/null
          Rate   for  read while
for   362612/s    --   -7%  -19%
read  389496/s    7%    --  -13%
while 449755/s   24%   15%    --

/usr/share/dict/words
        Rate   for  read while
for   4.73/s    --  -17%  -37%
read  5.73/s   21%    --  -24%
while 7.55/s   60%   32%    --

/etc/passwd
         Rate   for while  read
for   14434/s    --  -17%  -21%
while 17297/s   20%    --   -6%
read  18355/s   27%    6%    --
#!/usr/bin/perl use strict; use Benchmark qw( cmpthese ); foreach my $file qw ( /dev/null /usr/share/dict/words /etc/passwd ) { open my $IN1, '<', $file or die "could not open $file"; my @list = <$IN1>; seek( $IN1, 0, 0 ); print "$file\n"; cmpthese( -5, { for => sub { seek( $IN1, 0, 0 ); my %counts = (); ++$counts{$_} for <$IN1>; die unless keys %counts == @list; }, while => sub { seek( $IN1, 0, 0 ); my %counts = (); ++$counts{$_} while <$IN1>; die unless keys %counts == @list; }, read => sub { seek( $IN1, 0, 0 ); my %counts = (); read $IN1, my $buffer, -s $IN1; ++$counts{$_} for split( /^/m, $buffer ); die unless keys %counts == @list; }, } ); }
-- gam3
A picture is worth a thousand words, but takes 200K.


Comment on Re^2: Why is "for" much slower than "while"?
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://818457]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (7)
As of 2015-07-07 10:44 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (88 votes), past polls