Dieses Vorgehen ist, ob Text-Datei oder nicht, sowieso schlecht.
Es liest sich so: lies die Datei, teile sie in Zeilen auf und dann füge die Zeilen wieder zusammen. Da kann man sich das Aufteilen in Zeilen und anschließende Zusammenfügen auch gleich sparen.
Wenn die ganze Datei auf einmal in ein Skalar gelesen werden soll, dann nimm zum Beispiel
read_file aus
File::Slurp oder verwende Code wie diesen hier:
my $daten = do {
open(my $FH, "<", "dateiname") or die $!;
local $/;
<>
};
Merke:
- Dateihandeles mit $ beginnen!
- close passiert automatisch, wenn das Dateihandle aus dem Scope geht
- mit
stellst du das Aufsplitten in Zeilen aus, siehe
perlvar.
Obiger Code gilt für Textdateien. Wenn du Binärdateien hast, dann musst du das Perl mitteilen. Siehe
perlfunc binmode. Das IO-Layer kannst du auch gleich beim Öffnen setzen, siehe
perlfunc open. Also dann
open my $FH, "<:raw", $dateiname
bzw.
read_file($dateiname, binmode => ':raw');
mit
File::Slurp.
Eine weitere Bemerkung habe ich noch: warum fangen all deine Pfade mit /root/ an? Warum benutzt du nicht einen normalen User-Account?