3

我正在学习子程序参考。我写了一个代码,但它不工作

use strict;
use warnings;
sub test1 {
#$arg = shift;
print "arg";
}

sub test2 {
return \&test1;
}

&test2;

输出什么都没有。任何想法为什么我的代码不起作用。

4

3 回答 3

5

&test2几乎与test2(). 它运行 test2,它返回对 test1 的引用,但不运行它。您必须取消引用引用才能调用引用的代码:

test2->();

甚至

test2()->();
于 2013-09-23T11:08:07.933 回答
3

首先,

&test2;

是调用子程序的一种糟糕方式。&如果您甚至不知道它的作用,请不要使用!那应该是

test2;

或者

test2();

关于您的问题:您永远不会调用返回的子例程!

test2()->();
于 2013-09-23T11:08:15.807 回答
1

您正在返回对子例程的引用。您需要取消引用才能实际调用它:

&{test2()}
于 2013-09-23T11:07:57.383 回答