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