Некоторые мысли
1.Неявное разделение на @ _
$cols = split;
Выдает предупреждение:
Use of implicit split to @_ is deprecated
Если вы этого еще не сделали, вам следует добавить
use warnings;
use strict;
к вашему сценарию.(И учтите эти предупреждения.)
Попробуйте изменить $cols
на @cols
и вместо этого использовать $#cols
в цикле for.Например,
@cols = split;
for (my $col=0; $col <= $#cols; $col++)
2.Никакого chomp не требуется?
С split()
in perlfunc
:
Если также не указан PATTERN, разделяется на пробел (после пропуска любого начального пробела).
Это означает, что ваш символ новой строки также должен быть удален, поскольку он считается пробелом.
Следовательно, chomp()
не требуется.
3.Количество открытых файлов
Я считаю, что Perl open()
довольно быстрый, поэтому, возможно, стоит кэшировать ваши данные, как предложил Вайсмат.Пока вы это делаете, вы можете также использовать один дескриптор файла для всех файлов и открывать их только во время печати кэша.Например:
for ($i = 0; $i <= $#column; $i++) {
open OUT, ">> column$i.txt" or die $!;
print OUT $column[$i];
}
ETA: @column
здесь содержит столбцы, транспонированные из DATA.Вместо печати используйте:
$column[$col] .= $cols[$col] . " ";