in reply to a really dumb regular expression question

I think braces are metacharacters. Maybe you should assign $library::common{username} to a simple variable, like $LIB. But first, try putting \Q before each variable and \E after each variable.
  • Comment on Re: a really dumb regular expression question

Replies are listed 'Best First'.
Re: Re: a really dumb regular expression question
by davido (Cardinal) on Jan 19, 2004 at 04:46 UTC
    Braces are not interpreted as metacharacters inside of a regular expression if they are intended to be part of a variable interpolation instead.

    use warnings; $main::look{mom} = "works"; my $var = "It works!"; if ( $var =~ /$main::look{mom}/ ) { print "Guess what! It matched!\n"; }

    Variable interpolation occurs before the regexp engine revs up and starts its work. See perlop under the "Gory details of parsing quoted constructs" section. The variable interpolation stage gets performed a couple passes before the regexp engine kicks in.

    However, it may still be necessary to use \Q and \E, if the content of your interpolated variable could, itself, be misinterpreted as metacharacters.

    Here's contrived example of a ? and a . being seen as metacharacters when they were probably intended to be seen as literal text:

    use strict; use warnings; my $test_interpolation = "Old McDonald had a farm?."; if ( "Old McDonald had a fart " =~ m/$test_interpolation/ ) { print "Ewwwww!\n"; } __OUTPUT__ Ewwwww!

    Wrapping a \Q and \E around the variable interpolation inside the regexp would cure this problem, as would using the quotemeta function.


    Dave