in reply to Re^2: grep for lines containg two variables
in thread grep for lines containg two variables
I wish I had a computer that executed 4380585.25 greps per second...
Your test is useless. The @data, $string1 and $string2 used by the test are always undef. I fixed it up below. Note the use of sub { ... } instead of q{ ... }. Subs capture over my variables, while the string is evaled in a different scope where the my varibles don't exist.
outputs#!/usr/bin/perl use strict; use warnings; use Benchmark qw( cmpthese ); my $string1 = qr/tr/; my $string2 = qr/e/; my @data = do { open(my $fh, '<', $0) or die; <$fh> }; cmpthese (-3, { grep_and => sub { my @r = grep /$string1/ && /$string2/, @data; return @r; }, double_grep => sub { my @r = grep /$string1/, grep /$string2/, @data; return @r; }, lookahead => sub { my @r = grep /^(?=.*$string1)(?=.*$string2)/, @data; return @r; } });
Rate lookahead double_grep grep_and lookahead 8114/s -- -52% -62% double_grep 16986/s 109% -- -21% grep_and 21483/s 165% 26% --
The contents of @data are probably not all that good, so the figures aren't perfect, but they give a pretty good idea.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: grep for lines containg two variables
by l3v3l (Monk) on Dec 08, 2005 at 17:54 UTC | |
by ikegami (Patriarch) on Dec 08, 2005 at 18:35 UTC | |
by l3v3l (Monk) on Dec 08, 2005 at 19:55 UTC |