我正在学习子程序参考。我写了一段代码,但它无法正常工作
use strict;
use warnings;
sub test1 {
#$arg = shift;
print "arg";
}
sub test2 {
return \&test1;
}
&test2;
输出无效。任何想法为什么我的代码不起作用。
答案 0 :(得分:5)
&test2
几乎与test2()
相同。它运行test2,它返回对test1的引用,但不运行它。您必须取消引用该引用以调用引用的代码:
test2->();
甚至
test2()->();
答案 1 :(得分:3)
首先,
&test2;
是一种调用子程序的糟糕方式。如果你甚至不知道它的作用,请不要使用&
!那应该是
test2;
或
test2();
关于你的问题:你永远不会调用返回的子程序!
test2()->();
答案 2 :(得分:1)
您将返回对子例程的引用。您需要取消引用才能实际调用它:
&{test2()}