我正在使用遺留代碼,並且必須使用require
.pl文件來定義子foo
。我的問題是在我的main::
命名空間中已經有另一個子foo
,稍後在我目前沒有處理的程序的一部分中調用它。如何防止在Perl中覆蓋子?
我需要的文件定義了sub foo {}
,因爲它顯然不希望foo的東西在它通常被調用的地方發生。就我而言,這很糟糕。
我已經試過玩弄的*foo
水珠:
*old_foo = *foo;
require 'foo_killer.pl';
*foo = *old_foo;
當然,因爲我只是創建了一個別名(不工作布賴恩d FOY指出的133頁掌握Perl),因此*old_foo
將指向現在的'空'子例程。
有沒有辦法以某種方式將*foo{CODE}
中的內容複製到其他位置而不是別名?或者有另一種方法可以解決這個問題嗎?
您可以在自己的名稱空間中重新定義你自己的'foo'(帶包成'包礦;子富{} ...包爲主;'例如,然後調用它應用了這個命名空間限定符? – raina77ow
@ raina77ow:第一個'foo'完全來自其他地方,它不是我的,它只是需要調用它打印頁面的頁腳,但我沒有影響力但是如果它被一個空的子網取代,那麼我的網頁底部會丟失,這有點像被你的褲子夾住了;-) – simbabque
不,我已經談到了你可以改變的'foo'的命名空間,而不是另一個。 ) – raina77ow