1#!/usr/bin/perl 2 3use strict; 4use warnings; 5use Test::Weaken; 6 7# uncomment this to run the ### lines 8use Smart::Comments; 9 10{ 11 # Array::RefElem stored global detected 12 use Array::RefElem; 13 my $global = 123; 14 my $tw = Test::Weaken::leaks 15 ({ 16 constructor => sub { 17 my @array; 18 my $aref = \@array; 19 &Array::RefElem::av_store (\$aref, 0, $global); 20 # Array::RefElem::av_store (@$aref, 0, $global); 21 return \@array; 22 23 # Array::RefElem::av_store (\@array, 0, $global); 24 # return \@array; 25 }, 26 }); 27 ### $tw 28 exit 0; 29} 30 31{ 32 # Tie::RefHash::Weak key objects are detected 33 my $global; 34 my $tw = Test::Weaken::leaks 35 ({ 36 constructor => sub { 37 require Tie::RefHash::Weak; 38 my %hash; 39 my $key = [ 123 ]; 40 # $global = $key; 41 my $value = [ 456 ]; 42 tie %hash, 'Tie::RefHash::Weak', $key => $value; 43 print values %hash,"\n"; 44 ### keyaddr: $key+0 45 ### tieobj: tied %hash 46 return \%hash; 47 }, 48 }); 49 ### $tw 50 exit 0; 51} 52 53{ 54 # Tie::RefHash key objects are detected 55 my $global; 56 my $tw = Test::Weaken::leaks 57 ({ 58 constructor => sub { 59 require Tie::RefHash; 60 my %hash; 61 my $key = [ 123 ]; 62 $global = $key; 63 my $value = [ 456 ]; 64 tie %hash, 'Tie::RefHash', $key => $value; 65 print values %hash,"\n"; 66 ### keyaddr: $key+0 67 ### tieobj: tied %hash 68 return \%hash; 69 }, 70 }); 71 ### $tw 72 exit 0; 73} 74