Как создать подпрограмму Perl, которая принимает блок кода

У меня есть набор подпрограмм, которые выглядят так:

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 представляют собой разные конечные автоматы (FSM), которые читают содержимое разных файлов и передать данные в хэш-ссылку. Может быть, есть более разумный поступок, чем то, что я пытаюсь достичь.

18
задан Brad Mace 20 August 2012 в 14:16
поделиться