in reply to Re: Re: Re: regex "o" modifier
in thread regex "o" modifier

You'll want to revisit Re^2: meaning of /o in regexes. If you interpolate qr// compiled expressions you lose because the thing is compiled more often than it needs to be. Your "I believe you could do..." is incorrect.

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: regex "o" modifier
by edoc (Chaplain) on May 07, 2003 at 05:53 UTC

    hmm.. yup, gotcha there.. shouldn't have added that last bit.

    ok.. knew I saw something somewhere.. in "Programming Perl" it has the example:

    $regex = qr/$pattern/; $string =~ /foo${regex}bar/; # interpolate into larger patterns

    ..and then the comment, "This time, Perl does recompile the pattern, but you could always chain several qr// operators together into one."

    So would they maybe be suggesting something more like:

    my $re = qr!yes|no!; my $re2 = qr!\sthankyou!; my $bigre = $re.$re2; print "polite yes or no\n" if "yes thankyou" =~ $bigre;

    hmm.. on further thought, that doesn't seem right either. Would $re & $re2 each be stringified in that operation? If so that would mean that $bigre would simply be eq to the string '(?-xism:yes|no)(?-xism:\sthankyou)'

    The only other thing I can think they mean is:

    my $bigre = qr!yes|no!.qr!\sthankyou!;

    But I really don't see the point in that... Anyone know what they mean by "chain several qr// operators together"?

    cheers,

    J

      It says chaining, not concatenating.
      my $re = qr!yes|no!; my $re2 = qr!${re}\sthankyou!; print "polite yes or no\n" if "yes thankyou" =~ $re2;

      Makeshifts last the longest.

        but that's the same as what they refer to as "interpolate into larger patterns". They offer chaining as an alternative.. seemingly to avoid re-compilation..