Abstract: Ich möchte in diesem Minivortrag das module Devel::FindRef vorstellen.
Häufig steht man vor der Frage, wo genau eine Variable (oder allgemein
ein Perl-Wert) referenziert wird. Mit reinem Perl hat man wenig
Chancen, dies herauszufinden. Devel::FindRef ist ein kleines Modul, mit
dem man exakt herausfinden kann, wo eine bestimmte Variable
referenziert wird, ob es einen Referenz-Zyklus gibt, oder welche
closure den Wert noch referenziert.
Ein Report von Devel.::FindRef sieht z.B. so aus:
SCALAR(0x7cc738) is
+- referenced by REF(0x7cc7e0), which is
| in the lexical '$x' in CODE(0x7ae500), which is
| +- the containing scope for CODE(0x7c54e8), which is
| | in the global &Test::testsub.
| +- the main body of the program.
+- in the global $Test::var.
+- referenced by REF(0x7cc630), which is
| in the member 'ukukey2' of HASH(0x7ae140), which is
| +- referenced by REF(0x7c5590), which is
| | in the lexical '$local' in CODE(0x7c54e8), which was seen
before.
| +- referenced by REF(0x82cc00), which is
| in the global $Test::hash2.
+- referenced by REF(0x7ae4e8), which is
| in the member 'ukukey' of HASH(0x7cc888), which is
| in the global %Test::hash.
+- referenced by REF(0x7ae2f0), which is
not found anywhere I looked :(