You could try out the study function. However, you'll have to refactor your code so that the outer loop is done on the texts, and of course pull the regex compiling out of there.
Assuming that %hash1 and 2 are different from $hash1_ref, this could become something like (untested):
Update: added codesub slow_match { my ( $hash_ref_1, $hash_ref_2 ) = @_; # %texts, %patterns coming from global (was: %hash1, %hash2) my %matches; foreach my $pattern ( keys %$patterns_ref ) { $matches{$pattern} = qr/\b$pattern\b/; } while ( my ( $text_id, $text ) = each %texts ) { study $text; while ( my ( $pattern, $high_lvl_id ) = each %patterns ) { if ( $text =~ $matches{$pattern} ) { $$hash_ref_1{$text_id} .= ':'.$high_lvl_id; foreach my $part (split(/\s/,$pattern)) { $$hash_ref_2{$text_id} -> {$part} = 0; } } } } }
In reply to Re: Efficient regex matching with qr//; Can I do better?
by waba
in thread Efficient regex matching with qr//; Can I do better?
by kruppy
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |