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".
In reply to Re^6: Implicit closing of files
by ikegami
in thread Implicit closing of files
by rovf
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |