in reply to Re^5: Implicit closing of files
in thread Implicit closing of files
And, frankly, being able to depend on timely destruction would be nice.
It's a Perl5 feature! Don't know about Perl6.
Destruction of SVs is not related to what has a hard reference (C pointer) to it. As soon all the lexical variables, package variables, stack reference, etc disappear, destruction occurs (including calling the appropriate DESTROY).
use Devel::Peek; sub DESTROY { print STDERR "*Destroyed*\n" } { local $foo; { my $bar = bless {}; $foo = $bar; Dump($foo); print STDERR ("Exiting inner\n"); } Dump($foo); print STDERR ("Exiting outer\n"); } print STDERR ("Exiting file scope\n");
Here's the relevant lines of the output:
REFCNT = 2 Exiting inner REFCNT = 1 Exiting outer *Destroyed* Exiting file scope
Re^2: deleteing references might help. It doesn't matter whether a value is referenced by a lexical var, by a package var, or by the underlying memory structure of an array. As soon as something's refcount reaches zero, it is destroyed. In the figure, "Automatically" can be read as "Immediately".
|
|---|