Subject: | memory leak |
Date: | Wed, 22 Apr 2009 15:25:14 -0700 |
To: | bug-switch [...] rt.cpan.org |
From: | Stuart Kendrick <skendric [...] fhcrc.org> |
Switch.pm-2.14, perl-5.10.0, CentOS 5.3
i think i've found a memory leak in Switch
============================================================
#!/usr/bin/perl
use strict;
use warnings;
use English;
use Perl6::Say;
use Switch;
$OUTPUT_AUTOFLUSH = 1;
my ($count, $file, $line);
$file = '/var/log/syslog';
open my $fh, '<', $file or die "Cannot open $file: $!";
while ($line = <$fh>) {
$count++;
switch ($line) {
case /Shrill and clear he crowed/ { say 'shrill' }
case /recking nothing of wizardry/ { say 'recking' }
}
print '.' if $count/10000 == int $count/100000; # Entertain me
}
say "$file contains $count lines";
============================================================
The resulting process grows steadily in memory usage, until my OS kills it.
i can replace the 'switch' statement as follows, and the process stays constant
in memory size and terminates normally
============================================================
#!/usr/bin/perl
use strict;
use warnings;
use English;
use Perl6::Say;
use Switch;
$OUTPUT_AUTOFLUSH = 1;
my ($count, $file, $line);
$file = '/var/log/syslog';
open my $fh, '<', $file or die "Cannot open $file: $!";
while ($line = <$fh>) {
$count++;
if ($line =~ /frog/) {
say 'Shrill and clear he crowed';
}
elsif ($line =~ /toad/) {
say 'recking nothing of wizardry';
}
print '.' if $count/10000 == int $count/100000; # Entertain me
}
say "$file contains $count lines";
============================================================
--sk
stuart kendrick
fhcrc