Text::Parts 0.09 リリース
2000くらいファイル分割しようと思ったら、"Too many open files"と言われてしまったので。
no_open オプションを使って、write_files を使うのであれば、特に問題は無かったかと思いますが、split メソッドを使って、自分で write_file を使うと、お亡くなりになってたみたいなので、その対応をしました。
no_open オプションを付けても、write_file や all の際には、勝手に open_and_seek /close するようにしました。
use Text::Parts; my $splitter = Text::Parts->new(file => $file, no_open => 1); my (@parts) = $splitter->split(num => 2000); my $i; foreach my $part (@parts) { $part->write_file("file_name" . $i++); }
getline の場合は、open_and_seek と close を最初と最後に自分でよんで下さい。
use Text::Parts; my $splitter = Text::Parts->new(file => $file, no_open => 1); my (@parts) = $splitter->split(num => 2000); foreach my $part (@parts) { $part->open_and_seek; while(my $l = $part->getline) { # ... } $part->close; }
ちなみに、Linuxであれば、1020を超えるような分割をする場合に、no_open オプションをつけてください。
ulimit -n 2000 のように開けるファイルディスクリプタの数を変更すれば、特に何もオプションつけなくてもOKですが。