"superglobale" Variable
Wallor
- perl
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
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.
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
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
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
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.
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