我試圖調用一個嵌套的遞歸perl函數,但我無法使用正確的語法。嵌套的函數調用作用域和語法
問題:對嵌套函數執行遞歸調用的正確語法是什麼(如果嵌套函數應該被遞歸調用)?
答案:參考接受的答案中的建議僞代碼。
這裏是一個僞代碼片斷:
use Scalar::Util;
sub outerfunction {
my $innerfunction = sub {
# Do something
innerfunction();
# Do other things
};
Scalar::Util::weaken($innerfunction);
&$innerfunction(@_);
};
我試圖調用innerfunction如下面的(與相應的錯誤消息):
innerfunction
未定義子程序&主: :內功能
&innerfunction
未定義的子程序&主要:: innerfunction
&$innerfunction
全局符號 「$ innerfunction」 需要明確的包名
我也試着申報innerfunction爲本地,但收到以下內容:
全局符號「$ innerfunction」需要明確的包名
我沒有太多的經驗,解釋型語言,所以涉及到內存/堆泄漏/損壞或與上述僞其他危險(任何意外評論除了遞歸系統限制外)也將不勝感激。
謝謝! 在Linux上2.6.34.7-61.fc13.x86_64
你怎麼使用的參考'weaken'打算? – TLP 2012-03-08 20:12:03
爲什麼使用嵌套函數?你認爲這樣做的好處是什麼? – TLP 2012-03-08 20:14:54
發現了幾個帖子,提示其用法,以防止當函數引用超出範圍時perl解釋程序可能會忽略的過時引用造成的內存泄漏。不過,它似乎並未影響潛在的問題。如果使用weaken()是不可取的,請糾正我的理解。 – WMX 2012-03-08 20:15:41