in reply to newline behavior in Regular Expression
Longer answer: in a perl regular expression match, without the m option being applied to the match, a $ will match both the end of the string and, if the string ends in a newline, will also match right before the final newline. The s option does not change the behavior of $. It does, however, change the behavior of . so that . will match any character, up to and including newline.
But you did (.*?). That is, you made the .* match non-greedy, meaning that it took as few characters as possible, so it took everything before but not including the final newline, and then $ matched right before the final newline character.
The solution is to not make the second match non-greedy (i.e. use (.*) and not (.*?)), or to use something that really means just the end of the line and nothing else - that is, use \z instead of $.
All of this is fairly clearly explained by doing perldoc perlre, q.v.