Spec-Zone.ru › Perl 5.36

builtin

СОДЕРЖАНИЕ

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

ИМЯ

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

СИНОПСИС

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

ОПИСАНИЕ

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

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

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

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

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

Этот модуль псевдонима создает лексические псевдонимы для этих встроенных функций в текущем компилируемом пространстве имен. Это аналогично лексическому эффекту других псевдонимов, таких как 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", возврат каретки.

и все другие символы Юникода, помеченные как пробелы. Полный список находится в "Пробелы" в 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 для сравнимой реализации.

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

perlop, perlfunc, Scalar::Util

© 1993–2021 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.36.0/builtin

Spec-Zone.ru

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