Wallor: "superglobale" Variable

Hallo, seht mir bitte die Frage nach, ich bin Perl-Anfänger!
Ich übergebe die Variablen an Funktionen im Aufruf und lese sie im Unterprogramm mit ($v1, ....) = @_;
Nun habe ich aber eine Variable, die ich fast überall benötige und sie deshalb nicht immer in der Argumentliste aufführen möchte.
Wie kann ich diese im Hauptprogramm definieren und im Unterprogramm ansprechen?
Danke für Eure Unterstützung
Wallor

  1. Nun habe ich aber eine Variable, die ich fast überall benötige und sie deshalb nicht immer in der Argumentliste aufführen möchte.
    Wie kann ich diese im Hauptprogramm definieren und im Unterprogramm ansprechen?

    Wenn du diese über verschiedenen packages in unterschiedlichen Dateien brauchst, ist es am einfachsten diese entsprechenden qualifiziert zu verwenden $main::global

    Struppi.

    1. Wenn du diese über verschiedenen packages in unterschiedlichen Dateien brauchst, ist es am einfachsten diese entsprechenden qualifiziert zu verwenden $main::global

      Habe es leider noch nicht ganz verstanden.
      Ich habe Programm test.pl definiert:
      my $glob;
      und im Unterprogramm up.pl:
      print "$main::glob";

      Es wurde nichts ausgegeben.
      Muss ich da noch eine Verbindung zwischen beiden herstellen?
      Danke
      Wallor

      1. Hi,

        Ich habe Programm test.pl definiert:
        my $glob;
        und im Unterprogramm up.pl:
        print "$main::glob";

        Es wurde nichts ausgegeben.

        Das lässt darauf schließen, dass du nicht "use strict;" und auch nicht den Schalter "-w" verwendest (was du aber machen solltest), sonst würdest du nämlich eine Fehlermeldung bekommen.

        Muss ich da noch eine Verbindung zwischen beiden herstellen?

        Ja, du hast in deinem Ausgangsposting aber nicht erwähnt, dass es sich um 2 unterschiedliche Module (Dateien) handelt.
        Dazu musst du das Modul in dem die Variable definiert wird erst einbinden.
        Genaueres kannst du bei Selfhtml nachlesen.

        mfG,
        steckl

      2. Wenn du diese über verschiedenen packages in unterschiedlichen Dateien brauchst, ist es am einfachsten diese entsprechenden qualifiziert zu verwenden $main::global

        Habe es leider noch nicht ganz verstanden.
        Ich habe Programm test.pl definiert:
        my $glob;
        und im Unterprogramm up.pl:
        print "$main::glob";

        Es wurde nichts ausgegeben.
        Muss ich da noch eine Verbindung zwischen beiden herstellen?
        Danke
        Wallor

        Hallo Wallor,

        Du kannst eine Variable ueberall erreichen wenn Du diese am Anfang wie folgt definiert hast:

        our $varname=shift;

        jetzt braucst Du nur noch $varname einen Wert zuweisen. Aber ACHTUNG, die subroutinen koennen diese Variable auch nun aendern ;-))

        Viel Erfolg,
        DocSpeed

      3. Habe es leider noch nicht ganz verstanden.
        Ich habe Programm test.pl definiert:
        my $glob;

        Das ist falsch! Du musst eine globale Variabeln nicht mit my definieren, du solltest sie aber initialisieren.

        $main::glob = 'global';

        und im Unterprogramm up.pl:
        print "$main::glob";

        Es wurde nichts ausgegeben.

        Was soll auch ausgeben werden? $main::glob ist leer.

        Struppi.

  2. hi,

    Nun habe ich aber eine Variable, die ich fast überall benötige und sie deshalb nicht immer in der Argumentliste aufführen möchte.
    Wie kann ich diese im Hauptprogramm definieren und im Unterprogramm ansprechen?

    Innerhalb einer Datei:

      
    #!shebang  
    my $foo = 'bar';  
      
    sub helo{  
     print "$foo\n";  
    }  
    
    

    Falls über mehrere Dateien gültig sein soll global:
    use vars qw($foo @bar %hash);

    Und noch ein bischen eleganter ist das Einbinden von globalen Vars über eine ini-Datei, siehe Modul Config::IniFiles;

    Hotte