2013-09-23 26 views
3

我正在學習子例程引用。我寫了一個代碼,但它不起作用子例程引用不起作用

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

sub test2 { 
return \&test1; 
} 

&test2; 

輸出什麼也沒有。任何想法爲什麼我的代碼不工作。

回答

5

&test2做幾乎一樣test2()。它運行test2,它返回對test1的引用,但不運行它。你必須取消引用引用調用引用代碼:所有的

test2->(); 

甚至

test2()->(); 
+0

只是一個小的查詢。我們說「 - >」運算符 – Nitesh

+0

@Nitesh:「取消引用」,就像在C或C++中一樣。 – choroba

1

您正在返回對子例程的引用。您需要取消引用實際調用它:

&{test2()} 
3

首先,

&test2; 

是調用一個子程序的一個好辦法。如果你甚至不知道它做什麼,請不要使用&!這應該是

test2; 

test2(); 

在你的問題:你永遠不會調用返回的子程序!

test2()->();