我正在尝试将一组操作作为数组执行。为此,我必须传递子例程引用。 (可能还有其他方法可以在不使用数组的情况下执行此操作。但是,由于某些其他限制,我觉得这是最好的。)
我正在尝试做的基本示例代码:
#!/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作为here中的子例程引用在函数中构建。
当问题被问到大约3年之后,我想知道现在是否有任何替代方案。 如果有人解释为什么在这种情况下内置函数和用户定义的子例程之间存在区别,我将不胜感激?
答案 0 :(得分:7)
shift
不是潜艇;它就像and
和+
一样是一个运算符。如果您想要引用子,则需要创建一个子。
[sub { shift(@{$_[0]}) }, \$test, \@temp],