Practice of Programming

プログラム とか Linuxとかの話題

Text::Parts 0.09 リリース

Text::Parts

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ですが。