4 require Config; import Config;
5 if ($Config{extensions} !~ /\bList\/Util\b/) {
6 print "1..0 # Skip: List::Util was not built\n";
14 if (grep { /weaken/ } @Scalar::Util::EXPORT_FAIL) {
21 if ($DEBUG && eval { require Devel::Peek } ) {
22 Devel::Peek->import('Dump');
29 use Scalar::Util qw(weaken isweak);
32 ######################### End of black magic.
38 if($_[0]) { print "ok $cnt\n"; } else {print "not ok $cnt\n"; }
48 # Case 1: two references, one is weakened, the other is then undef'ed.
59 ok( $y ne "" and $z ne "" );
65 ok( $y ne "" and $z ne "" );
71 ok( not (defined($y) and defined($z)) );
77 ok( not (defined($y) and defined($z)) );
88 # Case 2: one reference, which is weakened
106 ok( not defined $y );
108 print "# EXITBLOCK\n";
114 # Case 3: a circular structure
121 my $y = bless {}, Dest;
132 print "# VALS: HASH ",$y," SELF ",\$y->{Self}," Y ",\$y,
133 " FLAG: ",\$y->{Flag},"\n";
136 print "# OUT $flag\n";
146 # Case 4: a more complicated circular structure
151 my $y = bless {}, Dest;
152 my $x = bless {}, Dest;
162 # Case 5: deleting a weakref before the other one
183 # Case 6: test isweakref
196 weaken($x->{Y} = \$a);
198 ok(!isweak($x->{Z}));