> On Tue, Aug 19, 2003 at 05:54:42PM -0500, Dan Muey wrote:
> > Howdy all:
> >
> > I'm trying to figure out the best way to test a string
> agains a list
> > of regexs like so:
> >
> > my @regex = qw(qr(joe$) qr(^mama) qr([abc]));
>
> As was pointed out already, don't use the qw().
>
> Here are some interesting benchmarks. The 'docs_in_col' file
> was about 16k, and the strings I was testing for were right
> at the bottom.
>
> #!/usr/bin/perl
>
> use warnings;
> use strict;
> use IO::File;
> use Benchmark;
>
> my $fh = new IO::File("docs_in_col") or die $!;
> my $str;
> {
> local $/;
> $str = <$fh>;
> }
>
> my $alt_re = qr(Zucker|Zuckerman|Zurrow);
> my @grep_re = (qr(Zucker), qr(Zuckerman), qr(Zurrow));
>
> timethese(5000,
> {
> match_alts_scalar => \&match_alts_scalar,
> match_alts_array => \&match_alts_array,
> grep_mults => \&grep_mults,
> }
> );
>
> ###----------------------------------------------------
>
> sub match_alts_scalar {
> my $found = ($str =~ /$alt_re/);
> return $found;
> }
>
> ###----------------------------------------------------
>
> sub grep_mults {
> my $found = grep { $str =~ /$_/ } @grep_re;
> return $found;
> }
>
>
> And here are the results:
>
> Benchmark: timing 5000 iterations of grep_mults, match_alts_scalar...
> grep_mults: 1 wallclock secs ( 0.54 usr + 0.00 sys = 0.54
> CPU) @ 9275.36/s (n=5000)
> match_alts_scalar: 40 wallclock secs (39.20 usr + 0.02 sys =
> 39.22 CPU) @ 127.49/s (n=5000)
>
>
> This should only be considered a first approximation, since
> there are various things I'm not controlling for (all my
> strings were at the end, they were fixed strings, etc).
>
> Still, I would use the grep version.
Thanks for the effort there very handy!
>
>
> --Dks
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]