內容

名稱

CORE - Perl 核心例程的命名空間

語法

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

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

BEGIN { *shove = \&CORE::push; }
shove @array, 1,2,3;			# pushes on to @array

描述

CORE 命名空間提供存取 Perl 內建函數的功能。CORE 套件內建於 Perl 中,因此在存取此命名空間中的例程之前,您不需要使用或需要假設的「CORE」模組。

可在 perlfunc 中找到 Perl 中內建函數的清單。

對於所有 Perl 關鍵字,CORE:: 前綴會強制使用內建函數,即使它已被覆寫或通常需要 feature 實用程式。

對於許多 Perl 函式,CORE 套件包含實際的子常式。此功能在 Perl 5.16 中是新的。您可以參考這些函式並建立別名。然而,有些函式只能作為裸字詞呼叫;亦即,您不能使用與符號語法 (&foo) 或透過參考呼叫它們。請參閱上述的 shove 範例。這些子常式存在於所有關鍵字,但下列關鍵字除外

__DATA____END__andcmpdefaultdodumpelseelsifeqevalforforeachformatgegivengotogrepgtiflastlelocalltmmapmynenextnoorourpackageprintprintfqqqqrqwqxredorequirereturnssaysortstatesubtrunlessuntilusewhenwhilexxory

對於下列函式,使用與符號語法和透過參考呼叫無法運作,因為它們具有特殊語法,無法總是轉換成簡單的清單 (例如,eofeof())

chdirchompchopdefineddeleteeofexecexistslstatsplitstatsystemtruncateunlink

覆寫核心函式

若要使用您自己的版本覆寫 Perl 內建常式,您需要在編譯時匯入它。這可以使用 subs 實用程式輕鬆達成。這只會影響您已匯入該子常式的套件

use subs 'chdir';
sub chdir { ... }
chdir $somewhere;

若要全域覆寫內建函式 (亦即,在所有名稱空間中),您需要在編譯時將您的函式匯入 CORE::GLOBAL 偽名稱空間

BEGIN {
    *CORE::GLOBAL::hex = sub {
        # ... your code here
    };
}

每當呼叫內建函式而沒有限定套件時,就會呼叫新的常式

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

在兩種情況下,如果您想要存取原始的、未變更的常式,請使用 CORE:: 前綴

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

作者

此文件由 Tels <nospam-abuse@bloodgate.com> 於 2007 年提供。

另請參閱

perlsubperlfunc