3

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

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

#!/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;

观察到的输出是:

Tested
Undefined subroutine &main::shift called at temp2.pl line 22.

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

已经有更早的查询, reg 内置函数作为此处的子例程引用。

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

4

1 回答 1

7

shift不是潜艇;它是一个类似于andand的运算符+。如果您想要对子的引用,则需要创建一个子。

[sub { shift(@{$_[0]}) }, \$test, \@temp],

有关的:

于 2013-03-01T08:22:36.487 回答