通过在
Windows XP上运行Strawberry perl 5.12.3.0中的以下代码,可以找到我遇到的问题.
#!/usr/bin/perl -w use strict; use warnings; use Win32::Unicode::File; use Encode; my $fname = shift @ARGV; my $fh = Win32::Unicode::File->new; if ($fh->open('<',$fname)){ while (my $line = $fh->readline()){} close $fh; }else{ print "Couldn't open file: $!\n"; }
这里唯一发生的事情就是我执行了一条读取线,并且这一直在记忆,直到我从Strawberry perl中得到一个内存不足的错误.我使用的是一个非常大的文件,但由于此代码是基于流的,因此无关紧要.我在这里遗漏了什么,或者在草莓perl的某个地方有泄漏吗?我在ActivePerl中测试了完全相同的代码,并且工作正常,即它不会占用内存.
更新:用普通的菱形运算符替换Win32 :: Unicode :: File似乎至少可以在我的发行版上工作.请参阅以下代码.
use strict; use warnings; my $fname = shift @ARGV; if (open(my $fh,'<',$fname)){ while (my $line = <$fh>){} close $fh; }else{ print "Couldn't open file: $!\n";}
那么这就表明问题出在Win32 :: Unicode模块上吗?