как вызвать другую подпрограмму после оператора return - PullRequest
0 голосов
/ 05 июня 2019

Как я могу вызвать другую подпрограмму из существующей подпрограммы сразу после оператора return в perl.Я не хочу звонить перед оператором return, так как для этого требуется время.Я не хочу ждать.верните его и затем вызовите другую подпрограмму перед выходом.Возможно ли это в perl?

Ответы [ 2 ]

4 голосов
/ 05 июня 2019

Вы можете fork и запустить подпрограмму в новом процессе, пока возвращается исходный процесс.

sub do_something {
    my ($var1, $var2, $var3) = @_;
    my $output = ...

    if (fork() == 0) {
        # child process
        do_something_else_that_takes_a_long_time();
        exit;
    }
    # still the parent process
    return $output;
}
1 голос
/ 05 июня 2019

Ваш вопрос помечен как Moose, так что вот как вы делаете то, что вы хотите с модификатором метода . Модификатор after запускается после подпрограммы, но ее возвращаемое значение игнорируется.

package Foo;
use Moose;

sub frobnicate {
  my $self = shift;

  # ...

  return 123;
}

after frobnicate => sub {
  my ($self, $rv) = @_;

  $self->barnicate;
};

1;

Теперь, когда frobnicate будет сделано, будет вызываться barnicate.

...