Ein Hinweis scheint mir enorm wichtig:
undef $/;
Das ist sehr, sehr böse. $/ ist eine globale Perlvariable, und derartige Variablen sollten *niemals* einfach so überschrieben werden. Für die vorübergehende Manipulation, z.B. um eine Datei in einen Skalar statt in ein Array einzulesen, gibt es den local-Operator und anonyme Blöcke:
{
local $/;
my $inhalt = <FILE>;
}
Obiger Code bewirkt, dass für den anonymen Block (also alles zwischen „{“ und „}“) dem globalen $/ vorübergehend ein anderer Wert - nämlich undef - zugewiesen wird. Außerhalb dieses Blocks hat $/ den von Perl standardmäßig zugewiesenen Wert. Das ist wichtig, wenn Du innerhalb eines Projektes mehrere Operationen an Dateien durchführst. Man stelle sich nur vor, dass Du eine Datei in einem Rutsch einlesen willst, eine andere aber zeilenweise. Das dürfte mit undef $/ gründlich in die Hose gehen.
Siechfred
Hinter den Kulissen passiert viel mehr, als man denkt, aber meistens nicht das, was man denkt.