Hallo Alex,
Wenn ich ,mit &Log(*variablenname); aufrufe, bekomme ich nur den Variablennamen ausgegeben:
Variable: *modul::variablenname
aber nicht wie oben die zugehörigen Werte.
Das ganze hat hier wohl nichts mit Deiner vermodularisierung zu tun! Ich denke Dein Problem ist hier, daß Du $primkey per my definiert hast. Dies hat zur Folge, daß $primkey überhaupt nicht in der "symbol table" gelistet wird!!! *primkey steht aber nur für alle Einträge von [$@%*]primkey aus eben dieser Tabelle. Eine Möglichkeit dies zu umgehen, wäre $primkey aus der my-Klammer herauszunehmen und separat per local($primkey); zu defininieren ...
sub Log {
# uebergebene Typeglobs in Array speichern
my @log = @_;# Logdatei oeffnen
open (LOG, ">>$logfile") die "Can`t append to $logfile: $!";
flock (LOG,2) unless $^O =~ /win/i;
# Variablen schreiben
foreach (@log) {
print LOG " Variable: ",$_,"\n";
# Typeglob ist Scalar
if ( ${$_} ) {
&_resolveRefs(${$_});
}
.
. # Hier ist der Code fuer Arrays und Hashs
.
}
close LOG;
}
}
Deine Überprüfung auf Scalar und wohl auch die anderen Varianten finde ich ein wenig riskant. Sollen leere Variablen z.B. nicht ausgegeben werden?
# Typeglob ist Scalar
if (definded *{$_}{SCALAR}) {
&_resolveRefs(*{$_}{SCALAR});
}
# Typeglob ist für Array
if (definded *{$_}{ARRAY}) {
&_resolveRefs(*{$_}{ARRAY});
}
...
Das ganze schimpft sich *foo{THING} Syntax. Näheres dazu unter "perldoc perlref".
Gruß,
Jörk