CORE
СОДЕРЖАНИЕ
ИМЯ
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" перед доступом к процедурам в этом пространстве имен.
Список встроенных функций Perl можно найти в perlfunc.
Для всех ключевых слов Perl префикс CORE:: заставит использовать встроенную функцию, даже если она была переопределена или в обычном случае потребовало бы прагму feature. Несмотря на внешнее сходство, это никак не связано с пакетом CORE, а является частью синтаксиса Perl.
Для многих функций 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 году.
СМОТРИТЕ ТАКЖЕ
© 1993–2020 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.30.3/CORE