Since you haven't used the /m modifier, Perl won't treat it as a "single line".
No. That's backwards. Single-line is the default. m switches to (m)ultiline mode.
Furthermore, m only affects the defintion of ^ and $. Since neither are used here, whether m is present or absent is irrelevant.
The replacement first takes off the first three characters (which includes the newline), and then it goes for another pass to get the last two characters.
No. In fact, the \n is a red herring. The same problem occurs with my $string = "1234";.
The first pass sees the characters at pos 0 to 3 replaced with "go", setting pos = 4.
The second pass sees the characters at pos 4 to 4 replaced with "go", setting pos = 4.
The third pass ends the g loop since the only possible match would start and end at the same positions as the second pass.
my $string = "1234";
$string =~ s/.*/print("($&)");'go'/egs; # (1234)()
What I find most interesting, however is that the /g seems to have something to do with it too. That is /ms does one replacement
With and without g, both regex do the same first substitution. With g, it proceeds to do other possible substitutions. That's the very definition of g.
|