Siechfred: Öffnen / Schreiben mit +>datei.dat

Beitrag lesen

Hell-O!

Dort http://de.selfhtml.org/perl/funktionen/einausgabe.htm#open steht:
+>datei.dat bedeutet: Datei datei.dat zum Lesen und zum Schreiben von Daten öffnen.

Ich denke, dass da die http://perldoc.perl.org/functions/open.htmlPerldokumentation aussagekräftiger ist:

"If MODE is '>' , the file is truncated and opened for output, being created if necessary."

Und weiter:

"You can put a '+'  in front of the '>'  ...  to indicate that you want both read and write access to the file ... the '+>'  mode would clobber the file first."

Heißt im Klartext: Wenn du den Modus '>' verwendest, wird der Dateizeiger am Anfang der Datei positioniert. Sollte die Datei nicht existieren, wird sie angelegt. Verwendest du den Modus '+>', ist das Verhalten wie beschrieben, die Datei wird jedoch zuerst geleert.

ICH möcht eigentlich nur wissen, ob man mit +> einlesen kann, oder nicht.

Ja, aber eine leere Datei. Ergo ist dieser Modus für dein Vorhaben nicht geeignet. Du müsstest es mit dem Modus '+>>' und seek in Kombination mit truncate probieren:

# Datei zum anhängenden I/O öffnen  
open FH, '+>>', $datei || die $!;  
flock FH, LOCK_EX;  
# Dateizeiger am Anfang positionieren  
seek FH, 0, 0;  
# Alte Daten auslesen  
my $old_data = <FH>;  
# wieder zurück zum Anfang  
seek FH, 0, 0;  
# Datei abschneiden  
truncate FH, 0;  
# neue Daten reinschreiben  
print FH 'Some new data';  
# zurück zum Anfang  
seek FH, 0, 0;  
# Einlesen der neuen Daten zur Kontrolle  
my $new_data = <FH>;  
close FH;  
  
# Ausgabe:  
print 'old data: ', $old_data, "\n";  
print 'new data: ', $new_data, "\n";

Oder einfach zweimal öffnen, einmal zum Lesen und einmal zum Schreiben.

Siechfred

--
Ich bin strenggenommen auch nur interessierter Laie. (molily)
Kabelkuddelmuddel || Steuerfreie Geburtsbeihilfen?  || RT 221 Erfurt-Altstadt i.V.