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