EisFuX: Globale und lokale Variablen definieren

Beitrag lesen

Hallo Stefan,

open ({my,our} $FILE, "...") or die $!;
open(my $FILE, "$gFile") || die("can't read $gFile, $!");
Wenn ich das so definiere, gehen leider die Dateifunktionen nicht.
FILE muss doch die Adresse des Filezeigers haben, dann kann man doch auch nicht my $FILE schreiben.

Die Verzeichnis- und Dateihandles von Perl sind keine richtigen Variablen. Sie haben so eine Art Sonderstatus.
Ich würde dir raten, das Perl-Modul IO::File einzubinden. Das stellt Dateihandles als Objekte zur Verfügung.
Die kannst du dann wie gewöhnliche Variablen verwenden -- also auch mit "my" oder "our". Auch die Übergabe als
Parameter für Subroutinen ist damit möglich.

Die Benutzung ist relativ unkompliziert, es lassen sich alle üblichen Ein- und Ausgabeoperationen von Perl
auf diese Filehandles anwenden, und das Modul ist gut dokumentiert:

  
use IO::File;  
  
# Filehandle initialisieren  
$fh = new IO::File;  
  
# Datei öffnen, anzeigen und schließen  
if ($fh->open("< file")) {  
  print <$fh>;  
  $fh->close;  
}  
  
$fh = new IO::File "> file";  
if (defined $fh) {  
# in Datei schreiben  
  print $fh "bar\n";  
  $fh->close;  
}  

MffG
EisFuX

--
... Suchmaschinen-Blog ...