I thought that if we got away from using the refaddr, we would solve the problem. Won't the following methodology work?
Here is my attempt to create an alternate ID. I don't want to post the whole program inline; here are the changes.
11c11,15
< *ID = \&Scalar::Util::refaddr;
---
> sub ID ($) {
> my ($self) = @_;
>
> return ref($self) ? $$self : '';
> }
28c32
< *{ $caller . '::ident' } = \&Scalar::Util::refaddr;
---
> *{ $caller . '::ident' } = \&Class::Std::ID;
360a365,366
> my $count = 0;
>
370a377
> $$new_obj = $count++;
512c519,523
< *ID = \&Scalar::Util::refaddr;
---
> sub ID ($) {
> my ($self) = @_;
>
> return ref($self) ? $$self : '';
> }
519a531
> $$new_obj = $count++;
We won't care if the address of the anonymous hash changes; that is not the key. We have an alternate key that stays in tact. This is my first stab at it.
When I made tried this on my Mac, I barfed on the coercions test.
% make test
PERL_DL_NONLAZY=1 /usr/bin/perl "-MExtUtils::Command::MM" "-e" "test_h
+arness(0, 'blib/lib', 'blib/arch')" t/*.t
t/00.load.........# Testing Class::Std v0.0.4
t/00.load.........ok
+
t/access..........ok
+
t/automethod......ok
+
t/coercions.......Deep recursion on anonymous subroutine at /Users/esh
+arris/.cpan/build/Class-Std-0.0.4/blib/lib/Class/Std.pm line 14.
Deep recursion on subroutine "Class::Std::ID" at (eval 26) line 3.
t/coercions.......dubious
+
Test returned status 0 (wstat 11, 0xb)
t/cumulative......ok
+
t/dump............ok
+
t/pod-coverage....skipped
all skipped: Test::Pod::Coverage 1.04 required for testing POD
+ coverage
t/pod.............skipped
all skipped: Test::Pod 1.14 required for testing POD
t/simple..........ok
+
Failed Test Stat Wstat Total Fail Failed List of Failed
----------------------------------------------------------------------
+---------
t/coercions.t 0 11 ?? ?? % ??
2 tests skipped.
Failed 1/9 test scripts, 88.89% okay. 0/152 subtests failed, 100.00% o
+kay.
make: *** [test_dynamic] Error 2