Я могу видеть несколько вещей (например, не загружать ваш результат в файл сразу), но я подозреваю, что основное преимущество в производительности, которое вы получите, вероятно, будет от использования другого регулярного выражения. Для этого у вас есть лучшее представление о том, какой формат вывода данных из вашей программы?
Вот несколько примеров Perl, которые могут работать немного быстрее:
use strict;
foreach my $arg (@data){
my @score=();
open(my $fh, "program $arg $arg1 |");
while (<$fh>) {
chomp;
if (/\d+.+\s+((\d+)?\.?\d+)/o) {
push(@score, $1);
}
}
close($fh);
my @sorted = sort { $a <=> $b } @score;
}
Обратите внимание на несколько вещей:
- Я использую обработчик программного файла, поэтому я не использую временный файл, поэтому пропускаю весь проход данных.
- Я изменил регулярное выражение, чтобы использовать вложенные группы, а не несколько параметров.
- Я использую строгие и сохраняю названия пакетов (ради бога, используйте строгий в вашем perl).
Другие люди говорили, что используют темы. Вам НЕ нужно этого делать, так как выполнение процесса, как я делал с помощью завершающего канала (|) в функции open, заставляет perl форкнуть процесс для вас. Затем вы используете стандартные каналы Unix для асинхронного чтения из программы.