2012-05-02 62 views

回答

4

http://perldoc.perl.org/perlsub.html#Overriding-Built-in-Functions

許多內置功能可能會被改寫,但是這應該只是偶爾有很好的理由審判。通常這可以通過試圖在非Unix系統上模擬缺少的內置功能的軟件包來完成。

只有在編譯時從模塊導入名稱才能覆蓋 - 普通的預先聲明不夠好。然而,使用潛艇編譯,您可以在效果,通過導入語法預先聲明潛艇,而這些名稱可能然後覆蓋內置的:

例子:

use subs 'chdir', 'chroot', 'chmod', 'chown'; 
chdir $somewhere; 
sub chdir { ... } 

注:以上所有內容均摘自上述鏈接

+0

謝謝。我看起來很清楚。感謝您的建議。 – user419534

1

您可以使用Sub::Override,但我不知道它是否可以覆蓋原生函數。

5

perldoc CORE顯示了一個簡單的例子,說明如何覆蓋內置的hex函數。

BEGIN { 
     *CORE::GLOBAL::hex = sub { 1; }; 
    } 

    print hex("0x50"),"\n";      # prints 1 
    print CORE::hex("0x50"),"\n";    # prints 80