如何将参数传递给从其他子例程调用的引用子例程

时间:2013-09-23 12:59:35

标签: perl

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

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

我希望输出为     你好     喂

不知道该怎么做

2 个答案:

答案 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