循环错误

时间:2015-10-09 13:17:24

标签: perl loops filehandle

尝试根据文件中存在的匹配将fastq文件拆分为多个文件,因此输出文件可以超过500个。提供两个输入文件 - 一个用于匹配和其他内容(fastq)。将匹配放在不同的文件中。此代码完美无缺,但无法创建超过502个文件。 502以上,说无法制作文件。这是循环中文件句柄的限制。我需要创建>一次502个文件。有解决方案吗感谢

my @fh_array;
 foreach(@file_names){
    chomp $_;
    local *OUT;
    open (OUT, ">", "$_\.txt") or die "cannot write file";
    push @fh_array, *OUT;

}

    # In for loop, it works
    print $fh_array[0] "Hello";

2 个答案:

答案 0 :(得分:1)

我不认为这是一个Perl问题。我用1000个文件运行它,没问题。使用ulimit可以显示(并可能设置)的打开文件数量有每个进程限制。

答案 1 :(得分:0)

虽然您的系统可能存在一些限制,导致许多文件句柄同时打开,但事实上这也是一个不必要或非常实用的强力解决方案。如果您只是在需要时打开文件而不是一次打开所有文件,我会打赌您不会注意到显着的性能差异。

例如:

write_to_file($file, @lines);

sub write_to_file {
    my ($file, @lines) = @_;
    open my $fh, ">>", $file or die "Cannot open file '$file' for appending: $!";
    print $fh @lines;
}