1
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")->();

我知道这是错误的语法,但不知道该怎么做。我希望问题很清楚。

我希望输出为你好你好

不知道该怎么做

4

2 回答 2

2

调用 Coderefs,如$coderef->(@args). 例如

sub hello {
  my $name = shift;
  print "Hello $name\n";
}

sub invoke {
  my ($code, @args) = @_;
  $code->(@args);
}

invoke(\&hello, "World");

输出:Hello World

于 2013-09-23T13:04:32.700 回答
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
于 2013-09-23T13:05:45.343 回答