如何在return语句后调用另一个子例程

时间:2019-06-05 10:32:27

标签: perl moose mojolicious

在perl中的return语句之后,如何从现有子例程中调用另一个子例程。 我不想在return语句之前调用,因为它需要花费一些时间来渲染。我不想等。返回它,然后在退出之前调用另一个子例程。在perl中可以吗?

2 个答案:

答案 0 :(得分:4)

您可以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 :(得分:1)

您的问题被标记为Moose,所以这里是您如何使用method modifier来做自己想做的事情。 after modifier在子元素之后运行,但是其返回值将被忽略。

package Foo;
use Moose;

sub frobnicate {
  my $self = shift;

  # ...

  return 123;
}

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

  $self->barnicate;
};

1;

现在,只要完成frobnicate,就会调用barnicate

相关问题