Spec-Zone.ru › Perl 5.28

ЯДРО

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНОПСИС
  • ОПИСАНИЕ
  • ПЕРЕОПРЕДЕЛЕНИЕ ФУНКЦИЙ ЯДРА
  • АВТОР
  • СМОТРИ ТАКЖЕ

ИМЯ

ЯДРО - Пространство имен для системных подпрограмм 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 г.

СМОТРИ ТАКЖЕ

perlsub, perlfunc.

© 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.28.3/CORE

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API