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".
|