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

$ 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.

Replies are listed 'Best First'.
Re: Re^4: Regex Grumblings (Variable Interpolation)
by Anonymous Monk on May 23, 2001 at 21:22 UTC
    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!