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