in reply to Re^4: Tokenizing and qr// <=> /g interplay
in thread Tokenizing and qr// <=> /g interplay

I can answers your first question by answering your second one. If you made all the first elements of your array references Regexp objects:
$_->[0] = qr/\b(\Q$_->[0]\E)b/ for @corrections_to_make;
then you could do your loop as
for my $crummy_good_ar (@corrections_to_make) { my ($crummy, $good) = @$crummy_good_ar; $file_in_string_form =~ s/$crummy/$good/ig; }
This way, even if you end up looping over THAT code, you'd still be dealing with already-compiled regexes. As soon as you put additional text into a regex with qr// in it:
my $rx = qr/abc/; if ($str =~ /^($rx)$/) { ... }
Perl has to do the "compare physical regex forms" test. Only if the qr// object is all alone will it have the entire benefits it was made for.

Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart

Replies are listed 'Best First'.
Re^6: Tokenizing and qr// <=> /g interplay
by ff (Hermit) on Apr 25, 2005 at 13:37 UTC
    Okay, so an array of [ qr, $good ] combos could help me if my example was something like:

    for my $file_in_string_form ( @all_files ) { for my $crummy_good_ar (@corrections_to_make) { my ($crummy, $good) = @$crummy_good_ar; $file_in_string_form =~ s/$crummy/$good/ig; } }
    And in the meantime, if I have no additional files to process, I might as well compile the regexen as needed?

    Thanks! I think I understand now. :-)