Perl内置函数作为子例程引用

Sid*_*Sid 3 perl

我正在尝试将一组操作作为数组执行.为此,我必须传递子例程引用.(可能还有其他方法可以在不使用数组的情况下执行此操作.但是,由于某些其他限制,我觉得这是最好的.

我正在尝试做的基本示例代码:

#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
sub test()
{
   print "Tested\n";
}

my $test;
my  @temp = (1, 2, 3);
my $operations = [ 
           [\&test, undef, undef],
           [\&shift, \$test, \@temp], 
           ];

foreach(@$operations){
   my $func = shift $_;
   my $out = shift $_;
   $$out = $func->(@$_);
}

print Dumper $test;
Run Code Online (Sandbox Code Playgroud)

观察到的输出是:

Tested
Undefined subroutine &main::shift called at temp2.pl line 22.
Run Code Online (Sandbox Code Playgroud)

查询 - 是否可以将内置子例程作为引用传递?

已有早期查询,reg在这里作为子例程引用构建.

由于问题被问了大约3年,所以想知道现在是否有任何替代方案.如果有人解释为什么在这种情况下内置函数和用户定义的子例程之间存在区别,我将不胜感激?

ike*_*ami 7

shift不是一个子; 这是一个运营商只是喜欢and+.如果要引用sub,则需要创建sub.

[sub { shift(@{$_[0]}) }, \$test, \@temp],
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考 - ikegami对此的扩展答案位于http://stackoverflow.com/questions/7167599/what-are-perl-built-in-operators-functions/7167873#7167873 (2认同)