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

Beitrag lesen

Hi Struppi.
SUPIE, ganz ganz viel DANKE und eine nach wie vor offene Frage bleibt mir ...

du benutzt keine Module, kein use strict und läßt dir die Warnungewn nicht anzeigen. Das kann u.U. zusätzliche Arbeit für dich bedeuten. wie auch hier.
Wenn du dein Programm mit:
#!/usr/bin/perl -w
startest, hättest du zumindest eine Meldung bekommen warum das falsch läuft.

Bist Du sicher, dass da was kommt ?
Es ist ja noch kein Fehler, wenn nix eingelesen wird, oder ?

open(LOG,"+>$dat") || &fehler("Kann <b>$dat</b> nicht lesen.");
Das '&' Zeichen ist veraltet und hat eine spezielle Bedeutung in aktuelen Perlversionen. Im algemeinen ist es überflüssig und du kannst dir noch ausgeben lassen warum das öffnen scheiterte:

1. Danke
Ich ruf ein sub auf statt die. Wäre vielleicht besser ...

open(LOG,"+>$dat") || fehler("Kann <b>$dat</b> nicht lesen.Weil: $!");
Jetzt hast du die Datei geöffnet und der alte Inhalt wird überschrieben.

Den verstehe ich nicht, weil ich ohne open nicht lesen könnte ...

flock(LOG, 2) || &fehler("Kein Schreib-Lock auf <b>$dat</b>.");
hier ist es sinnvoll use fnctl einzubinden, ich meine du meinst LOCK_EX

Wenn's besser ist, dann 2tes  dickes Danke !

$data = <LOG>;
du liest die Zeile an der der Filezeiger steht ein. Da du die Datei überschreiben willst, steht dieser am Anfang und die Datei ist gelöscht.

Versteh ich nicht.
Mir würde die 1. Zeile reichen, an der der Zeiger steht, aber die wird nicht gelesen ...

chomp($data);
Jetzt versuchst du von einem undefinierten Wert das letzte Zeichen (genauer bis zum ersten vorkommen von $/) abzuschneiden.

Joo, falls sich nen Absatz oder so einschleicht ... nicht wirklich nötig ...

$data .= "Irgendwas";
und hier hättest du eine Meldung bekommen:
Use of uninitialized value in scalar chomp at xxx.pl line ...

AAAAH, dickes Danke ... wenns denn so ist.
Ich kann da gern ein my vor $data setzen, aber hab dadurch noch immer nix eingelesen :o(

flock(LOG, 8);
das solltest du nicht machen, da ein close() automatisch ein LOCK_UN ausführt und du so hier - zumindest theoretisch - einen parallen Zugriff haben könntest, bis das ...
close(LOG);
ausgeführt wird.

Das ALLERDICKSTE DANKE !!!
DAS hab ich mich nämlich schon immer gefragt !!!
(wegen dem theoretischen Gedanken ...)

Ws mache ich falsch ?
Oder ist es sowieso besser,
Öffnen->Lesen->Schliessen und dann neu Öffnen->Schreiben->Schliessen ?
Nein, entweder zum anhängen und lesen öffnen open F, "+>>...." und du musst dich dann mit dem Filezeiger (seek) beschäftigen

Sollte ich wirklich mal !
Aber brauch ich das für 1 Zeile einlesen auch ???

oder mit open F, "+>...." zum lesen und schrieben öffnen, aber dann musst du vorher erst sicherstellen, dass die Datei vorhanden ist.

Und das kann ich eben nicht, weil die Datei täglich neu eröffnet werden soll.

Meine Frage bleibt leider.
Warum liest er mit (my) $data = <LOG>; die Datei (1. Zeile) nicht ein.

Versteh ich noch nicht :o(

Ich find auch absolut NIX zu +> im Web (lässt sich auch Sche... nach suchen)
Nutzt das niemand, oder warum ist das so undokumentiert ?

Danke, Frank