Trotz verlassen Scopebereich bleibt Var. bestehen

Von: , Frage gestellt am Mi, 7. Feb 2001

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

1 Antworten zu dieser Frage

  1. Antwort von nach 3 Stunden hilfreich
    Re: Trotz verlassen Scopebereich bleibt Var. beste

    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.

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!