[Dresden-pm] Destruktoren

Steffen Schwigon schwigon at webit.de
Fre Jul 25 03:35:49 CDT 2003


Torsten Werner <twerner-perl at vwisb7.vkw.tu-dresden.de> writes:
> On 2003-07-25, Steffen Schwigon wrote:
> > Nicht generell vergleichbar, denke ich, schon weil in Perl das
> > destruieren an das Garbage Collection gebunden ist.
> 
> Ich habe gerade nochmal im Kamelbuch nachgesehen:
> 
> 'When a block is exited, its locally scoped variables are normally
> freed up, ...'

Durchaus.

IMHO jedoch schon dann nicht mehr, sobald z.B. $handle noch an eine
Funktion übergeben würde, die die Variable aus irgendeinem Grund
länger bindet. Dann sollte $handle auch nicht garbage-collected
werden. Also von daher doch eher näher an Java (oder generell
garbagecollecteten Sprachen), soweit ich das verstehe.

In diesem Fall dürfte sogar das "undef $handle" nichtmehr die Files
schließen, sondern nur ein explizites "$handle->close". Was man
wiederum vielleicht gar nicht will, wenn man $handle woandershin
übergeben hat, und nicht weiß, ob dort das Filehandle später noch 
im geöffneten Zustand benötigt wird.

Das spricht wiederum dafür, *kein* explizites undef/close reinzumachen
und auf den GC zu warten, weil der in Deinem Originalcode durchaus
funktionieren sollte, was ja auch Deine zitierte Stelle oben sagt.

Hm, jetzt ist es irgendwie ja doch wieder so wirr wie immer mit
den Filehandles... :-)

Summa summarum, bin ich dafür, Dein originales Stück Code unverändert
zu lassen. "Perl tries to DO THE RIGHT THING", so heißt es doch immer.


GreetinX
Steffen
-- 
Steffen Schwigon <schwigon at webit.de>