Stefan: Globale und lokale Variablen definieren

Hallo zusammen,

ist es syntaktisch richtig, wenn ich globale Variablen mit our und lokale Variablen mit my definiere?

#!/usr/bin/perl -w

use strict;
use warnings;
use CGI::Carp qw(fatalsToBrowser);

globale Variablen...

our ($gVar1,gVar1);

sub test
{
 # lokale Variablen...
 my ($lVar1,lVar1);
}

Wie definiere ich denn einen Filezeiger global und lokal?

open(FILE, "...");

Mit our *FILE und my *FILE bekomme ich einen Fehler.

Danke im voraus.

  1. Hi,

    ist es syntaktisch richtig, wenn ich globale Variablen mit our und lokale Variablen mit my definiere?

    ja!

    Wie definiere ich denn einen Filezeiger global und lokal?

    open ({my,our} $FILE, "...") or die $!;

    • Erwin -
    1. hi Erwin,

      danke dir vielmals!

      bye

      Stefan

    2. Hi Erwin,

      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.

      1. 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 ...
        1. Hi EisFuX,

          danke dir !

          Werde es gleich mal testen....

  2. Wie definiere ich denn einen Filezeiger global und lokal?

    global sind sie von Hause aus, lokal definierst du sie mit local oder auch gensym aus dem Modul symbol

    Struppi.