use strict;
use warnings;
sub test1 {
my $arg = shift;
print "$arg";
}
my $rs = \&test1;
sub test2 {
my $value = shift;
print "$value \n";
return $rs;
}
&test2("hello")->("Bye");
按预期正常工作。但是如果在test1 sub中我们想要从test2 sub传递参数。像
这样的东西use strict;
use warnings;
sub test1 {
my $arg = shift;
print "$arg";
}
my $rs = \&test1;
sub test2 {
my $value = shift;
print "$value \n";
return $rs($value);
}
&test2("hello")->();
我知道这是错误的语法,但不知道该怎么做。我希望问题很明确。
我希望输出为 你好 喂
不知道该怎么做
答案 0 :(得分:2)
调用$coderef->(@args)
之类的Coderef。 E.g。
sub hello {
my $name = shift;
print "Hello $name\n";
}
sub invoke {
my ($code, @args) = @_;
$code->(@args);
}
invoke(\&hello, "World");
输出:Hello World
。
答案 1 :(得分:2)
嗯,你有一个引用到一个函数,你可以像使用->
use strict;
use warnings;
sub test1 {
my $arg = shift;
print "$arg";
}
my $rs = \&test1;
sub test2 {
my $value = shift;
print "$value \n";
return $rs->($value); # <---
}
test2("hello");
# prints
hello
hello