in reply to Re^2: Regex Grumblings (Variable Interpolation)
in thread Regex Grumblings (Variable Interpolation)

Of course it dosen't. $ within a regex means End-Of-Line. And trying to match something (nonempty) after the end of the line is not successful within a single line match.

(But I have to admit, I had to run Perl for this and then stare at the output for some time)

Update: I can't confirm jeroenes' findings with Perl 5.003 under solaris. I only get one bar printed and no substitution.

  • Comment on Re: Re^2: Regex Grumblings (Variable Interpolation)

Replies are listed 'Best First'.
Re^4: Regex Grumblings (Variable Interpolation)
by tadman (Prior) on May 23, 2001 at 17:42 UTC
    $ within a regex means end of line, unless it could be interpreted as a variable. It has been this way for a while, as Perl4 wasn't very astute in this regard, and often needed to be coached, such as s/${foo}/XYZ/g.

    In my initial example, s/$bar/XYZ/g operates as expected, replacing instances of '$bar' with 'XYZ'. Further, as larryk pointed out, s/$foo/BAR/g should resolve to s/$bar/BAR/g given that $foo is '$bar', but this interpolated result is treated more literally somehow than if you had just put that very code in there in the first place, or had eval'd it as such.

    I am convinced this is an inconsistency, or perhaps, a peculiar feature of the regular expression compiler. The "intelligence" that Perl demonstrates in the initial compilation does not apply to the post-interpolation compilation phase, to put it more technically.
      It's not peculiar. There are 2 steps. First the written RE is transformed in a value of 'type' RE like a written 2 is transformed into the number 2. This step includes the variables. But only once. Step 2: the match. No interpolation, all acording to the rules. Evidence in case: /$m/o . Study the o flag!