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.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to