builtin
СОДЕРЖАНИЕ
ИМЯ
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