smi*_*ith 0 perl callback perl-data-structures
我有以下子程序:
sub my_sub {
my $coderef = shift;
$coderef->();
}
sub coderef {
my $a = shift;
my $b = shift;
print $a+$b;
}
Run Code Online (Sandbox Code Playgroud)
并希望以my_sub(\coderef($a,$b))这种方式调用,即我想提供代码ref的参数,并在my_sub函数上运行它.在perl中可以做这样的事情吗?
如果这些潜艇要按面值采取,my_sub则不做任何事情.
这里有两件事:
定义coderef
my $adder = sub { my ( $first, $second ) = @_; $first + $second };
# Adds first two arguments
Run Code Online (Sandbox Code Playgroud)使用必要的参数执行它
print $adder->(2,3); # '5'
Run Code Online (Sandbox Code Playgroud)假设my_sub是某种类型的函子,它将coderef作为第一个参数传递:
sub functor {
my $coderef = shift; # Pull of first argument
$coderef->( @_ ); # Rest of @_ are coderef arguments
# Or simply : sub functor { +shift->( @_ ) }
}
# Usage:
print functor ( $adder, 2, 3 ); # '5'
Run Code Online (Sandbox Code Playgroud)