Memory leak with cross references
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
# memory leak
# try running with 5,000,000
make_match('Foo', 'Bara', 'dump');
my $n = $ARGV[0] || 0;
for (1..$n) {
make_match('Foo', 'Bara');
}
if (@ARGV) {
print "Please press ENTER to finish...";
<STDIN>;
}
sub make_match {
my ($man_name, $woman_name, $dump) = @_;
my $man = {
name => $man_name,
};
my $wife = {
name => $woman_name,
};
$man->{wife} = $wife;
$wife->{man} = $man;
if ($dump) {
print Dumper $man, $wife;
}
}
$VAR1 = {
'wife' => {
'man' => $VAR1,
'name' => 'Bara'
},
'name' => 'Foo'
};
$VAR2 = $VAR1->{'wife'};
Run the script and when it displays the prompt, check the memory usage. Passing 100,000 on the command line made it use 39 Mb memory.