Spec-Zone.ru › Perl 5.38

builtin

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНТАКСИС
  • ОПИСАНИЕ
    • Лексический импорт
  • ФУНКЦИИ
    • true
    • false
    • is_bool
    • weaken
    • unweaken
    • is_weak
    • blessed
    • refaddr
    • reftype
    • created_as_string
    • created_as_number
    • ceil
    • floor
    • indexed
    • trim
    • is_tainted
    • export_lexically
  • СМОТРИТЕ ТАКЖЕ

ИМЯ

builtin - Perl-pragma для импорта встроенных служебных функций

СИНТАКСИС

use builtin qw(
    true false is_bool
    weaken unweaken is_weak
    blessed refaddr reftype
    created_as_string created_as_number
    ceil floor
    indexed
    trim
    is_tainted
    export_lexically
);

ОПИСАНИЕ

Perl предоставляет несколько служебных функций в пакете builtin. Это обычные функции, которые выглядят и ведут себя как обычные пользовательские функции. Они не обеспечивают нового синтаксиса или не требуют специального разбора. Эти функции всегда присутствуют в интерпретаторе и могут быть вызваны в любое время по их полному имени. По умолчанию они недоступны как короткие имена, но могут быть запрошены для удобства.

Отдельные именованные функции могут быть импортированы, перечислив их в качестве параметров импорта в операторе use для данного pragma.

Общая механизма builtin, а также каждая предоставляемая им отдельная функция, в настоящее время находятся на стадии эксперимента.

Предупреждение: В настоящее время весь namespace builtin находится на стадии эксперимента. Вызов функций в нем будет вызывать предупреждения категории experimental::builtin.

Лексический импорт

Этот модуль pragma создаёт лексические псевдонимы для этих встроенных функций в текущей области компиляции. Это аналогично лексическому эффекту других pragmas, таких как strict и feature.

sub classify
{
    my $val = shift;

    use builtin 'is_bool';
    return is_bool($val) ? "boolean" : "not a boolean";
}

# the is_bool() function is no longer visible here
# but may still be called by builtin::is_bool()

Поскольку эти функции импортируются лексически, а не по имени пакета, пользователю не нужно предпринимать никаких специальных мер для предотвращения их случайного появления в качестве методов объектов из класса.

package An::Object::Class {
    use builtin 'true', 'false';
    ...
}

# does not appear as a method
An::Object::Class->true;

# Can't locate object method "true" via package "An::Object::Class"
#   at ...

ФУНКЦИИ

true

$val = true;

Возвращает булево значение истины. Хотя любое скалярное значение может быть проверено на истинность, и большинство определённых, непустых и неравных нулю значений считаются "истинными" в perl, это значение является специальным, поскольку «is_bool» считает его выделенным булевым значением.

Это даёт эквивалентное значение выражениям, таким как !!1 или !0.

false

$val = false;

Возвращает булево значение ложности. Хотя любое скалярное значение, не являющееся истинным, считается "ложным" в perl, это значение является специальным, поскольку «is_bool» считает его выделенным булевым значением.

Это даёт эквивалентное значение выражениям, таким как !!0 или !1.

is_bool

$bool = is_bool($val);

Возвращает true, если получено выделенное булево значение, или false, если нет. Выделенным булевым значением является результат любой функции, возвращающей булево значение (такой как true или is_bool сама), булева оператора, возвращающего булево значение (такого как операторы сравнения eq или == или оператор отрицания !), или любой переменной, содержащей один из этих результатов.

Эта функция ранее именовалась isbool. В настоящее время предоставлен псевдоним совместимости, но он будет удален в более поздней версии.

weaken

weaken($ref);

Уменьшает силу ссылки. Ослабленная ссылка не увеличивает счётчик ссылок на её референт. Если останутся только ослабленные ссылки на референт, он будет удалён, и все оставшиеся слабые ссылки на него получат значение undef.

unweaken

unweaken($ref);

Усиливает ссылку, отменяя действие предыдущего вызова «weaken».

is_weak

$bool = is_weak($ref);

Возвращает true, если получена ослабленная ссылка, или false, если это не ссылка или она не ослаблена.

Эта функция ранее именовалась isweak. В настоящее время предоставлен псевдоним совместимости, но он будет удален в более поздней версии.

blessed

$str = blessed($ref);

Возвращает имя пакета для ссылки на объект, или undef для ссылки, которая не является ссылкой на объект или не является объектом.

refaddr

$num = refaddr($ref);

Возвращает адрес памяти для ссылки, или undef для ссылки, которая не является ссылкой. Это значение, вероятно, не будет очень полезным для чистого кода Perl, но является полезным способом проверки идентичности или уникальности ссылки.

reftype

$str = reftype($ref);

Возвращает базовый тип контейнера референта ссылки, или undef для ссылки, которая не является ссылкой. Это возвращается в виде строки в верхнем регистре, например ARRAY для ссылок на массивы или HASH для ссылок на хеши.

created_as_string

$bool = created_as_string($val);

Возвращает булево значение, представляющее, было ли значение аргумента первоначально создано как строка. Возвращает true для любого скалярного выражения, последнее присваивание или изменение которого было строкового характера — например, присваивание из строковой литералы или результат строковой операции, такой как конкатенация или регулярное выражение. Возвращает false для ссылок (включая любые объекты), чисел, булевых значений и undef.

Вероятно, вы не захотите использовать это для обычной проверки данных в Perl, так как оно не вернёт true для обычных чисел, которые всё ещё могут использоваться как строки, ни для какой ссылки на объект, особенно объектов, которые перегружают оператор строкового преобразования в попытке вести себя больше как строки. Например

my $val = URI->new( "https://metacpan.org/" );

if( created_as_string $val ) { ... }    # this will not execute

created_as_number

$bool = created_as_number($val);

Возвращает булево значение, представляющее, было ли значение аргумента первоначально создано как число. Возвращает true для любого скалярного выражения, последнее присваивание или изменение которого было числового характера — например, присваивание из числовой литералы или результат числовой операции, такой как сложение. Возвращает false для ссылок (включая любые объекты), строк, булевых значений и undef.

Вероятно, вы не захотите использовать это для обычной проверки данных в Perl, так как оно не вернёт true для обычных строк десятичных цифр, которые всё ещё могут использоваться как числа, ни для какой ссылки на объект, особенно объектов, которые перегружают оператор числового преобразования в попытке вести себя больше как числа. Например

my $val = Math::BigInt->new( 123 );

if( created_as_number $val ) { ... }    # this will not execute

Хотя большинство кодов Perl должно работать со скалярными значениями, не зная их истории создания, эти две функции предназначены для использования модулями сериализации данных, такими как кодировщики JSON, или аналогичными ситуациями, где вопросы межъязыковой совместимости требуют различения между значениями, которые фундаментально являются строковыми или числовыми.

ceil

$num = ceil($num);

Возвращает наименьшее целое значение, большее или равное заданному числовому аргументу.

floor

$num = floor($num);

Возвращает наибольшее целое значение, меньшее или равное заданному числовому аргументу.

indexed

@ivpairs = indexed(@items)

Возвращает список чётного размера пар число/значение, где каждая пара состоит из числа, представляющего индекс в исходном списке, и значения в этой позиции в нём. Т.е. возвращает список, вдвое большего размера, чем исходный, равный

(0, $items[0], 1, $items[1], 2, $items[2], ...)

Обратите внимание, что в отличие от встроенной функции values, эта функция возвращает копии своих исходных аргументов, а не ссылки на них. Любые изменения этих копий не отражаются на исходных изменениях.

my @x = ...;
$_++ for indexed @x;  # The @x array remains unaffected

Эта функция в первую очередь предназначена для совместного использования с синтаксисом многопеременных foreach циклов; как

foreach my ($index, $value) (indexed LIST) {
    ...
}

В скалярном контексте эта функция возвращает размер списка, который она бы в противном случае вернула, и вызывает предупреждение в категории scalar.

trim

$stripped = trim($string);

Возвращает входную строку со снятыми пробелами в начале и конце. trim() удалит следующие символы:

" ", обычный пробел.

"\t", табуляция.

"\n", новая строка (подача строки).

"\r", возврат каретки.

и все другие символы Unicode, которые отмечены как пробелы. Полный список находится в "Пробелы" в perlrecharclass.

$var = "  Hello world   ";            # "Hello world"
$var = "\t\t\tHello world";           # "Hello world"
$var = "Hello world\n";               # "Hello world"
$var = "\x{2028}Hello world\x{3000}"; # "Hello world"

trim эквивалентно:

$str =~ s/\A\s+|\s+\z//urg;

В версиях Perl, где эта функция недоступна, обратитесь к модулю String::Util для сравнимой реализации.

is_tainted

$bool = is_tainted($var);

Возвращает true, когда передаётся запятнанная переменная.

export_lexically

export_lexically($name1, $ref1, $name2, $ref2, ...)

Экспортирует новые лексические имена в область, которая в данный момент компилируется. Имена, заданные первой частью каждой пары значений, будут ссылаться на соответствующий элемент, ссылка на который задана второй частью. Разрешенные типы элементов — подпрограммы и скалярные, массивовые и хешевые переменные. Если элемент — подпрограмма, имя может быть необязательно префиксным с помощью символа &, но для удобства этого можно не делать. Для элементов, которые являются переменными, символ требуется и должен соответствовать типу переменной.

export_lexically func    => \&func,
                 '&func' => \&func;  # same as above

export_lexically '$scalar' => \my $var;
# The following are not permitted
export_lexically '$var' => \@arr;   # sigil does not match
export_lexically name => \$scalar;  # implied '&' sigil does not match

export_lexically '*name' => \*globref;  # globrefs are not supported

Это должно вызываться во время компиляции; обычно это происходит внутри блока BEGIN. Обычно это используется в качестве части метода import модуля, когда вызывается в качестве части оператора use ....

СМОТРИТЕ ТАКЖЕ

perlop, perlfunc, Scalar::Util

© 1993–2023 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.38.0/builtin

Spec-Zone.ru

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