Halihallo nochmals
Mit my deklarierte Variablen lassen sich von anderen Packages (eg. main::) nicht
ansprechen, da sie im Stack (der "lexikalische Scope") des Moduls gespeichert werden.
our ist nach der Dokumentation eine Art "Durchschnitt" zwischen globalen Variablen
(diese werden in der Symbol-Table des main:: Moduls referenziert) und den lokalen
Variablen die eben im aktuellen Scope definiert sind. Durchschnitt deshalb, da sie
- und damit komme ich auf die eigentliche Antwort der Frage - eben trotz lokalem
Charakter (Modul-Stack) von anderen Modulen ausgelesen werden können.
Komisch...:
---
use strict;
print $test::test."\n";
while ( my ($n,$v) = each %{test::} ) {
print "$n=$v\n";
}
package test;
use strict;
my $test = '15';
BEGIN {$test = 'test';}
1;
---
die Variable $test ist im Modul test über my deklariert. Erwartungsgemäss wird die
Variable über main::print($test::test) nicht ausgegeben, aber etwas erstaunt mich:
Die Variable $test::test wird trotz lokaler Definition in der Symbol-Tabelle
referenziert. Das spricht gegen mein "Weltbild", da ich davon überzeugt war, dass
Variablen über 'my' im Stack (Perl ist stackorientiert, nicht zu verwechseln mit dem
Stack-Segment bei 3GL Languages) gespeichert werden und nicht in der Symbol-Tabelle
referenziert sind, da dort referenzierte Variablen IMHO eben den "Modul-Variablen" über
use vars qw/.../ entsprechen.? - Warum werden in der Symbol-Tabelle lokale Variablen
gespeichert? - Die sollte IMHO Modul-Charakter haben (also Modul-Variablen enthalten)...
Kann mir das jemand erklären?
Viele Grüsse
Philipp
RTFM! - Foren steigern das Aufkommen von Redundanz im Internet, danke für das lesen der Manuals.
Selbstbedienung! - Das SelfForum ist ein Gratis-Restaurant mit Selbstbedienung, Menüangebot steht in den </faq/> und dem </archiv/>.