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