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__
、and
、cmp
、default
、do
、dump
、else
、elsif
、eq
、eval
、for
、foreach
、format
、ge
、given
、goto
、grep
、gt
、if
、last
、le
、local
、lt
、m
、map
、my
、ne
、next
、no
、or
、our
、package
、print
、printf
、q
、qq
、qr
、qw
、qx
、redo
、require
、return
、s
、say
、sort
、state
、sub
、tr
、unless
、until
、use
、when
、while
、x
、xor
、y
對於下列函式,使用與符號語法和透過參考呼叫無法運作,因為它們具有特殊語法,無法總是轉換成簡單的清單 (例如,eof
與 eof()
)
chdir
、chomp
、chop
、defined
、delete
、eof
、exec
、exists
、lstat
、split
、stat
、system
、truncate
、unlink
若要使用您自己的版本覆寫 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 年提供。