Thread Suche nach zwei Begriffen (9 answers)
Opened by Gast at 2005-02-20 21:50

Gast Gast
 2005-02-21 18:40
#4444 #4444
[quote=Taulmarill,21.02.2005, 16:48]hm, index() sollte hier schneller sein, da es spezialisierter ist.
ich werd das mal nachher benchmarken wenn ich zeit habe.[/quote]
Ich hab das mal durch Benchmark gejagt. Den RegEx-Code hab' ich modifiziert um eine variable Anzahl an Suchbegriffen per AND zu ermöglichen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl
use warnings;
use strict;

use Benchmark qw(:all);
my @searched = qw( Eins Dies );
my @lines = <DATA>;

cmpthese( 1_000_000, {
'index' => sub { by_index( \@searched, \@lines ) },
'w_reg' => sub { by_walked_regex( \@searched, \@lines ) },
});


sub by_index {
my @such = @{ $_[0] };
my @lin = @{ $_[1] };

line:
while ( my $l = shift @lin ) {
for( @such )
{ next line unless index( $l, $_ ) + 1 }
print STDERR "i $l";
}
}

sub by_walked_regex {
my @such = @{ $_[0] };
my @lin = @{ $_[1] };

line:
while ( my $l = shift @lin ) {
for( @such )
{ next line unless $l =~ /$_/ }
print STDERR "wr $l";
}
}


Dies ist Zeile Eins, wird gefunden.
Dies ist Zeile Zwei, wird nicht gefunden.
Dies ist Zeile Drei, wird auch nicht gefunden.

Das Ergebnis:
Code: (dl )
1
2
3
4
5
phaylon@hamlett:~/ptests> perl search_bench.pl 2>/dev/null
Rate w_reg index
w_reg 13687/s -- -66%
index 40145/s 193% --
phaylon@hamlett:~/ptests>

hth

View full thread Suche nach zwei Begriffen