Trotz verlassen Scopebereich bleibt Var. bestehen

Wenn ich in einer Methode eines fremden Packages eine Referenz auf ein hier erstelles großes Array erstelle und diese Referenz mit my lokal angelegt wurde müßte doch sowohl die Referenz als auch das dahinterliegende Array nach verlassen der Methode gelöscht werden. Diese Methode gibt einen Hash zurück, von dem ein Hashelement eben diese Referenz ist.

Zu meiner Verwunderung aber auch zu meiner Freude stelle ich fest, dass ich im (diese Methode) aufrufenden Programm über das Hashelement Zugriff auf das große Array habe.

Ist dies der Fall, weil ich durch die Zuweisung des Rückgabehashes an einen lokalen Hash noch eine einzige Verbindung auf das Array (dessen Refrenz im Hash übergeben wurde)
habe und somit sein Löschen verhindere.

Thomas

Hallo Thomas,

Wenn ich in einer Methode eines fremden Packages eine Referenz
auf ein hier erstelles großes Array erstelle und diese
Referenz mit my lokal angelegt wurde müßte doch sowohl die
Referenz als auch das dahinterliegende Array nach verlassen
der Methode gelöscht werden. Diese Methode gibt einen Hash
zurück, von dem ein Hashelement eben diese Referenz ist.

Zu meiner Verwunderung aber auch zu meiner Freude stelle ich
fest, dass ich im (diese Methode) aufrufenden Programm über
das Hashelement Zugriff auf das große Array habe.

Ist dies der Fall, weil ich durch die Zuweisung des
Rückgabehashes an einen lokalen Hash noch eine einzige
Verbindung auf das Array (dessen Refrenz im Hash übergeben
wurde)
habe und somit sein Löschen verhindere.

Ja, genau so isses. Perl verwaltet fuer seine
Garbage Collection fuer jede Variable einen
Referenzzaehler und loescht ihn automatisch
sobald er auf 0 geht. Da du noch eine Referenz
auf die Variable besitzt, gibt es keinen Grund
zum Loeschen.

Fuer die Details schau dir mal die perlref-Dokumentation
deines Interpreters an (also in Linux/Unix: man perlref)

Gruss,
-Andreas.