私が抱えている問題は、WindowsXPのStrawberryperl5.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";
}
ここで起こっている唯一のことは、私がreadlineを実行し、Strawberryperlからメモリ不足エラーが発生するまでメモリを消費し続けることです。私は本当に大きなファイルを使用していますが、このコードはストリームベースであるため、問題にはなりません。ここで何かが足りないのですか、それともStrawberry perlのどこかにリークがありますか?ActivePerlでまったく同じコードをテストしましたが、正常に動作します。つまり、メモリを消費しません。
更新:Win32 :: Unicode :: Fileを通常のdiamond演算子に置き換えると、少なくとも私のディストリビューションでは機能するようです。次のコードを参照してください。
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モジュールにあることを示唆しているでしょうか?