Ahhh, excellent point ... One test which I think you should be performing however (and that with which I proved that my own code proposal did not work as intended) is the following which tests the out-of-scope destruction of your weakened reference - This is important because
Class::Singleton would pass the test examples in your code, whereas only
Class::WeakSingleton would pass this test.
{
my $g = wrapper->instance;
$g->{'key'} = 'value';
}
$h = wrapper->instance;
die "Bad mojo!" if exists $h->{'key'};
perl -le 'print+unpack"N",pack"B32","00000000000000000000001001101101"'