>>391
え? それ、正しい動作...

まず、s///gでは置換途中は対象変数が元の値を保持している。
確認例 perl -e "$_='AAA ';s/A/print/ge;print"

/gは、元の文字列でマッチが成立する場所を全て置換するという事。
m//g と s///g でマッチ個所は同一になる。

$の件(>>345)を別の表現にすると、先読みの肯定(/(?=\n)/)
単純な例

$_='a aa aaa aaaa aaaaa';
s/a*(?=a)/print "$`($&)$'\n"/ge;
print;

これは、直後が'a'である0文字以上の'a'を置換という指定。
print出力は345準拠。