У меня есть подразделение, которое читает текстовый файл FASTA в кусках.Вложенные модульные подпрограммы, в которых изменяется внутренняя подпрограмма
sub reader {
foreach my $line (<IN>) { # read line by line
chomp $line;
if ($line =~ m/^>/) { # if it's a title
&initiator($title, $seq) unless $firsttitle == 1;
$firsttitle = 0;
($title = $line) =~ s/^>//; # title without > at start
$seq = ''; # new seq
} else {
$seq = $seq . $line; # append seq lines
}
}
&initiator($title, $seq); # Do the thing for the last seq.
}
В середине нескольких петель, & инициатор называется. Я хотел бы иметь это в модуле, который я могу использовать, но замените инициатор & на другие подсистемы из других модулей. Эти субмарины также должны иметь свои собственные ресурсы. Будет ли что-то вроде следующей работы или есть более элегантное решение?
use Reader qw(reader);
use Othersub qw(subroutine);
my @par = ('Mary', 'Lamb');
my %functions = (foo => \&Othersub::subroutine);
&reader($file_to_read, $functions{'foo'}($par[0], $par[1]));
Примечание: Конечная файловая структура - Otherub.pm, Reader.pm и скрипт, который использует оба модуля.
Что вы подразумеваете под «необходимостью иметь собственные входы»? Вы имеете в виду, что эти функции имеют разные входные параметры, чем '& инициатор'? Потому что, в этом случае, какой смысл заставить эту функцию (точнее, ссылку на функцию _) читать читателю? –
Префиксные функции с '&' устарели в текущей версии perl. Теперь он имеет довольно специфический смысл, и лучше всего это избыточно. – Sobrique