Struppi: Fehler bei Dateizugriff

Beitrag lesen

Hallo Perl-Lerner

*g*

Jetzt habe ich so ein einfaches Beispiel hergenommen und doch Probleme !
Perl behauptet dass die Datei geschlossen ist, obwohl ich sie unmittelbar davor öffne.
Wo liegt da mein Denkfehler ?

Erstmal solltest du, gerade wenn du anfängst, alle Perlskripte "strict" machen. D.h. use strict verwenden und sinnvollerweise noch use warnings (oder den -w Switch), dann musst du alle Variabeln mit my oder our deklarieren, das ist zwar am Anfang nervig erspart dir aber die Suche nach Tippfehlern und undefinierten Variabeln.

#!/usr/bin/perl -w
use strict;

$tc_datei = testdat.txt;

Das geht schon mal nicht, was ist

$tc_time = time();

Das müßte dann lauten:
my  $tc_datei = 'testdat.txt';
my  $tc_time = time();

if (-e "$tc_datei")

Hier sind die Anführungszeichen überflüssig.

{                                              # Datei vorhanden
     open ($tc_datei_fh, "$tc_datei");

und hier solltest du trotzdem prüfen ob open funktioniert hat:

open ($tc_datei_fh, "$tc_datei") or die "Kann $tc_datei nicht öffnen, weil: $!";

und $tc_datei_fh muss mit my deklariert werden.

@tc_datei_inhalt = <$tc_datei_fh>;

Da du nur eine Zeile lesen willst, kannst du hier auch einen Skalar verwenden

close ($tc_datei_fh);

if ($tc_datei_inhalt[0] < $tc_time -120)      # mehr als 120 Sekunden vergangen ?
       {                                           # ja - Aktuelle Zeit eintragen
        open ($tc_datei_fh, ">$tc_datei");
        print $tc_datei_fh $tc_time;
        close ($tc_datei_fh);
       }
     else
       {                                           # nein - Fehlermeldung
        HTML_Output(@tbereits_gesendet);
        exit(1);
       }

}
  else
    {                                              # Datei nicht vorhanden
     open ($tc_datei_fh, ">$tc_datei");
     print $tc_datei_fh $tc_time;     # <<< hier  Fehler (line 223)
     close ($tc_datei_fh);
    }

So könnte das aussehen:

  
#!/usr/bin/perl -w  
  
use strict;  
my  $tc_datei = 'testdat.txt';  
my  $tc_time = time();  
if (-e $tc_datei)  
{                                              # Datei vorhanden  
    open (my $tc_datei_fh, $tc_datei) or die "Kann Datei $tc_datei nicht öffnen, weil: $!";  
    my $tc_datei_inhalt = <$tc_datei_fh>;  
    close ($tc_datei_fh);  
    if ($tc_datei_inhalt < $tc_time -120)      # mehr als 120 Sekunden vergangen ?  
    {                                           # ja - Aktuelle Zeit eintragen  
         open (my $tc_datei_fh, ">$tc_datei") or die "Kann Datei $tc_datei nicht öffnen, weil: $!";  
         print $tc_datei_fh $tc_time;  
         close ($tc_datei_fh);  
    }  
    else  
    {                                           # nein - Fehlermeldung  
         HTML_Output(@tbereits_gesendet);  
         exit(1);  
    }  
}  
else  
{                                              # Datei nicht vorhanden  
    open (my $tc_datei_fh, ">$tc_datei")or die "Kann Datei $tc_datei nicht öffnen, weil: $!";  
    print $tc_datei_fh $tc_time;     # <<< hier  Fehler (line 223)  
    close ($tc_datei_fh);  
}  

Struppi.

--
Javascript ist toll (Perl auch!)