我正在學習子例程引用。我寫了一個代碼,但它不起作用子例程引用不起作用
use strict;
use warnings;
sub test1 {
#$arg = shift;
print "arg";
}
sub test2 {
return \&test1;
}
&test2;
輸出什麼也沒有。任何想法爲什麼我的代碼不工作。
我正在學習子例程引用。我寫了一個代碼,但它不起作用子例程引用不起作用
use strict;
use warnings;
sub test1 {
#$arg = shift;
print "arg";
}
sub test2 {
return \&test1;
}
&test2;
輸出什麼也沒有。任何想法爲什麼我的代碼不工作。
&test2
做幾乎一樣test2()
。它運行test2,它返回對test1的引用,但不運行它。你必須取消引用引用調用引用代碼:所有的
test2->();
甚至
test2()->();
您正在返回對子例程的引用。您需要取消引用實際調用它:
&{test2()}
首先,
&test2;
是調用一個子程序的一個好辦法。如果你甚至不知道它做什麼,請不要使用&
!這應該是
test2;
或
test2();
在你的問題:你永遠不會調用返回的子程序!
test2()->();
只是一個小的查詢。我們說「 - >」運算符 – Nitesh
@Nitesh:「取消引用」,就像在C或C++中一樣。 – choroba