binmode rueckgaengig machen

28/08/2007 - 19:59 von Johannes v. Löwis | Report spam
Hallo allerseits,

ich beschaffe mir mit

($fh, $filename) = tempfile();

aus File::Temp ein Filehandle $fh und einen Dateinamen $filename. Laut
Dokumentation von File::Temp wird die Datei im 'binary mode' geoeffnet.

Ich schreibe anschliessend in die Datei, schliesse sie und oeffne dann
einen Editor via

system($editor, $filename);

Wegen des 'binary mode' des Filehandles bewirken Schreiboperationen der
Form

print $fh "foobar";

dass auch unter Windows nur nicht die im Textmodus ueblichen als
Zeilentrennzeichen in der Datei landen.

Ich kann und will nicht ausschliessen, dass als Editor unter Windows
notepad.exe verwendet wird, der bekanntlich Schwierigkeiten mit
Unix-Zeilenenden hat. Deshalb moechte ich $fh im Textmodus verwenden.
Die Dokumentation zu File::Temp meint, man solle binmode() nutzen, um
den Modus von $filehandle zu korrigieren. Leider weiss ich nicht, wie
ich das anstellen soll.

Das Problem ist nicht wirklich schwerwiegend, denn es gibt diverse
Moeglichkeiten, es zu umgehen:
- bei print angeben oder mit binmode($fh, ":crlf") immer als
Zeilenende anhaengen und davon ausgehen, dass Unix-Editoren damit
klarkommen (notfalls auch betruebssystemabhaengig),
- $fh schliessen und $filename erneut im Textmodus oeffnen, was eine
race condition ermoeglicht, die allerdings bei meinem Programmablauf
ohnehin nicht ausgeschlossen wird.

Am sinnvollsten erschiene es mir allerdings, $fh wieder in den Textmodus
umzustellen. Wie geht das?

Gruss und Dank im voraus
Johannes
 

Lesen sie die antworten

#1 Guido Ostkamp
29/08/2007 - 19:29 | Warnen spam
Johannes v. Löwis wrote:
Am sinnvollsten erschiene es mir allerdings, $fh wieder in den Textmodus
umzustellen. Wie geht das?



Du hast es ja selbst schon beschrieben:

Um unter Linux/Unix eine Datei im DOS/Windows Format zu beschreiben
benutzt Du binmode FH, ":crlf". Also z.B.

open FH, "> /tmp/outfile.txt" or die;
binmode FH, ":crlf";
print FH "Hello";
print FH "Hello";
close FH

Wenn Du die bspw. mit dem Editor 'vim' öffnest, solltest Du unten
in der Titelzeile (sofern aktiviert) sehen, daß er die automatisch als
[dos] formatige Datei erkennt. Unter Windows kannst Du also getrost
mit Notepad arbeiten. Voraussetzung ist natürlich, Du übertràgst die
Datei original nach Windows und nicht etwa per FTP, der falsch
eingestellt evtl. selber eine Transformation durchführt.

Gruß

Guido

Ähnliche fragen