Fein mitgedacht; "\n" in einer Regex ist in der Vielzahl der Anwendungsfälle zu schwammig. Die Fallen werden in PBP Kapitel 12 erläutert. Es wird empfohlen, immer die Flags /m, /s und /x zu setzen.
Die spezifische Aufgabe des OP strikt-interpretiere ich so: logisches Newline anhängen, wenn kein physisches Linefeed am Ende vorhanden.
require 5.006;
use charnames qw(:full);
$text .= "\n" unless $text =~ /\N{LF} \z/msx;
Besser aber, man matcht der Symmetrie halber auch auf logisches Newline. Die Lösung ist verblüffend einfach, wenn man weiß, wie es geht. Siehe http://p3rl.org/rebackslash.
require 5.010;
$text .= "\n" unless $text =~ /\R \z/msx;
Für die standardgemäße, 100%ig korrekte Behandlung von Zeilenumbrüchen kommt man um http://p3rl.org/Unicode::LineBreak nicht herum.