У меня есть набор подпрограмм, которые выглядят следующим образом:
sub foo_1($) {
my $name = shift;
my $f;
run_something();
open($f, $name) or die ("Couldn't open $name");
while (<$f>) {
//Something for foo_1()
}
close($f);
do_something_else();
}
И у меня есть четыре или более, которые выглядят одинаково, единственное, что меняется, - это тело блока while. Я хотел бы отвлечь это и прекратить копирование кода.
- Есть ли способ закодировать подпрограмму, которая принимает блок кода и выполняет его?
Чтобы предоставить больше контекста, различные подпрограммы foo представляют собой другую машину конечного состояния (FMS), которая считывает содержимое разных файлов и передает данные в хеш-ссылку. Возможно, есть более разумная вещь, чем то, что я пытаюсь выполнить.