Mit dem befehl binmode() wird eine Datei in den binären Modus geschaltet.
Wozu? Nun, es gibt Betriebssysteme, die unter einem Binärmodus und einem Textmodus unterscheiden. Zu diesen Betriebssysteme gehören unter anderem Dos und Windows, nicht jedoch Unix. Sollte ihr Script also auf einem Unix-System laufen, ist der Befehl binmode eigentlich überflüssig. Da man aber nie weiß, wo das Script letztendlich läuft, muß man ihn aber eben trotzdem im Hinterkopf behalten und ggf. einsetzen.
Und was macht nun binmode()?
Also:
Verschiedene Dateien, zum Beispiel .gif und .jpg-Bilder oder auch ausführbare Dateien, müssen zum Beispiel unter Dos und Windows im Binärmodus eingelesen werden, da diese Betriebssysteme die Zeichenfolge CR und LF (Carriage Return und Linefeed) automatisch in ein LF (also Linefeed) umwandelt. Dieser Automatismus würde natürlich die Daten unbrauchbar machen.
Genauso funktioniert es anders herum: ein LF wird in CR und LF verwandelt, die Daten würden also falsch geschrieben werden.
Der Befehl binmode() verhindert diesen Automatismus.
Was passiert hier?
Das Script stellt zuerst mit Hilfe von -s die Größe des Bildes in Bytes fest. Danach wird das Bild geöffnet, in den Binärmodus gewechselt und das Bild in den Skalar $bild eingelesen. Zum Schluß wird die Datei wieder geschlossen und das Bild ausgegeben.
Kommentare zum Beitrag "binmode() - Dateien binär behandeln in Perl"
Kommentar von eserte
Auch unter Unix kann die Verwendung von binmode() notwendig sein. Zum Beispiel bei Verwendung der (nunmehr ziemlich alten) Perl-Version 5.8.0, bei der ein implizites :encoding(utf8) eingeschaltet wurde, wenn im Environment des Benutzers eine utf8-Locale vorkam. Oder mit moderneren Perl-Versionen, wenn der Benutzer mittels der Environment-Variablen PERL_UNICODE diesen Effekt erreicht.