AlexBausW: Typgeglobs ausgeben und dereferenzieren?

Beitrag lesen

Hallo Forum,

Vor einiger Zeit kam ich auf die Idee, mir ein Modul zu schreiben, mit dem ich an beliebigen Stellen meiner Skripte, Variablen bzw. deren Zustände ausgeben kann.
Mit Typeglobs funktionierte das auch in der unten geposteten Konstellation auch ziemlich gut, und ergibt:
  Variable: *main::name1
    REF: SCALAR: wert;
  Variable: *main::name2
    REF: ARRAY: 0 => wert; 1 => value;
  Variable: *main::name3
    REF: HASH: eins => wert; zwei => value;

Jetzt habe ich LOG.pm in ein Modul eingebunden, das wiederum von einem Modul  aufgerufen wird, welches in ein Skript eingebunden ist.
Wenn ich ,mit &Log(*variablenname); aufrufe, bekomme ich nur den Variablennamen ausgegeben:
  Variable: *modul::variablenname
aber nicht wie oben die zugehörigen Werte.
In beiden Modulen wird 'use strict;' verwendet. (Den Code spar ich mir hier mal, stelle aber eine Version davon online: http://www.twoforyou.de/test/csv.txt ab Zeile 274, ist markiert, und bitte nicht lachen ;-))

Wieso funktioniert nun der Aufruf aus testlog.cgi, aber nicht mehr aus dem Modul, obwohl die im Modul mit print() ausgegebenen Variablen die korrekten Werte aufweisen?
Habe ich irgendwas übersehen, oder muss ich noch irgendetwas anderes beachten? Sehe ich vielleicht nur den Unterschied zwischen meinem Modul und dem Skript vor lauter Code nicht mehr?

Schon mal vielen Dank für etwaige Hinweise.

Gruß AlexBausW

P.S.: Die Übergabe des Filehandles (LOG) als Typeglob an  &_resolveRefs() habe ich schon mal erfolglos getestet :-(
P.P.S.: Ich hoffe das ist nicht zuviel Code :-)

#============================

LOG.pm

package LOG;

use strict;

Typeglob LOG als Modulvariable

use vars qw(*LOG);

#***********************************************

Schreibt Bezeichner und Werte in Logdatei

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;
   }
}

#********************************

loest Referenzen rekursiv auf

sub _resolveRefs {
   # Paramterreferenz
   my $ref = shift;
   # Referenz ist Skalar
   if (ref($ref) eq "SCALAR") {
      print LOG "SCALAR: ";
      &_resolveRefs(${$ref});
   }
   .
   . # Hier ist der Code fuer Arrays und Hashs
   .
   # Referenz ist Referenz
   elsif (ref($ref) eq "REF") {
      print LOG "REF: ";
      &_resolveRefs(${$ref});
   }
   # Ausgabe des Werts der Variablen
   else { print LOG $ref,"; "; }
}

#==================================

testlog.cgi

use LOG;

$scalar = "wert";
@array = ("wert","value");
%hash = ('eins' => "wert", 'zwei' => "value");

&Sub($scalar,@array,%hash);

sub Sub {
   ($name1,$name2,$name3) = @_;
   &Log(*name1, *name2, *name3);
}