Re: why a.pl is faster than b.pl
- From: bob_showalter@xxxxxxxxxxxxxxx (Bob Showalter)
- Date: Wed, 28 Dec 2005 13:54:59 -0500
Jeff Pang wrote:
hi,lists,
I have two perl scripts as following:
a.pl: ---- #!/usr/bin/perl use strict;
my @logs = glob "~/logs/rcptstat/da2005_12_28/da.127.0.0.1.*";
foreach my $log (@logs) { open (HD,$log) or die "$!"; while(<HD>){
if ( ($_ =~ /×¢²á/o) || ($_ =~ /Õ÷ÎÄ/o) || ($_ =~ /Ê¥µ®¿ìÀÖ/) || ($_ =~ /ӦƸ/o) || ($_ =~ /�ø�¨/o) || ($_ =~ /·¢»õ/o) || ($_ =~ /±±¾©/o) || ($_ =~ /×Ê��/o) || ($_ =~ /�Å�¢/o) || ($_ =~ /�ãɽ/o) || ($_ =~ /°Ù�ò/o) || ($_ =~ /Ãâ·Ñ/o) ) {
print $_;
}
}
close HD;
}
b.pl ---- #!/usr/bin/perl use strict;
my $ref = sub { $_[0] =~ /×¢²á/o || $_[0] =~ /Õ÷ÎÄ/o || $_[0] =~ /Ê¥µ®¿ìÀÖ/o || $_[0] =~ /ӦƸ/o || $_[0] =~ /�ø�¨/o || $_[0] =~ /·¢»õ/o || $_[0] =~ /±±¾©/o || $_[0] =~ /×Ê��/o || $_[0] =~ /�Å�¢/o || $_[0] =~ /�ãɽ/o || $_[0] =~ /°Ù�ò/o || $_[0] =~ /Ãâ·Ñ/o };
my @logs = glob "~/logs/rcptstat/da2005_12_28/da.127.0.0.1.*";
foreach my $log (@logs) { open (HD,$log) or die "$!"; while(<HD>){ print if $ref->($_); } close HD; }
I run the 'time' command to get the running speed:
time perl a.pl > /dev/null
real 0m0.190s user 0m0.181s sys 0m0.008s
time perl b.pl > /dev/null
real 0m0.286s user 0m0.278s sys 0m0.007s
Why the a.pl is faster than b.pl? I think ever the resulte should be opposite.Thanks.
Well, the time differences aren't dramatic. But off hand, I would say that a.pl is faster because no subroutine call is involved.
A couple of other observations:
1. /o is useless on these regexes, since they don't interpolate any variables.
2. $_ is the default target for the m// operator, so
$_ =~ /regex/
can be replaced with simply
/regex/
3. It will probably be faster to use a single regex of the format:
/pata|patb|patc|patd/
If the alternation can stay inside the regex code rather than happening out at the Perl opcode level, it might be faster.
.
- References:
- why a.pl is faster than b.pl
- From: Jeff Pang
- why a.pl is faster than b.pl
- Prev by Date: Re: GD::Help !
- Next by Date: Re: Processing a web page (or looping over a multi line string)
- Previous by thread: Re: why a.pl is faster than b.pl
- Next by thread: Re: why a.pl is faster than b.pl
- Index(es):
Relevant Pages
|