Глава 6.9. Встроенные функцииВ этой и следующих главах описаны все встроенные функции языка PERL, которые поддерживаются и в Unix, и в Windows. Для удобства пользования мы разбили их на следующие группы:
Перечень всех встроенных функций языка PERL приведен в Приложении 21. 6.9.1. Числовые функции
Функция absСинтаксис: abs число Аргументы: число числовое выражение Результат: числовое значение Функция abs возвращает абсолютную величину числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры: print abs 2; // 2 print abs -2; // 2 Функция atan2Синтаксис: atan2 число1, число2 Аргументы: число1, число2 числовые выражения Результат: числовое значение Функция atan2 возвращает арктангенс частного от деления числа1 на число2. Результат находится в диапазоне от -π до +π и соответствует величине угла в радианах между осью абсцисс и вектором до точки с координатами (число2, число1). Примеры: $x = atan2 -0, -1; # x равно -3.14159265358979 $x = atan2 -1, 0; # x равно -1.5707963267949 $x = atan2 0, 1; # x равно 0 $x = atan2 1, 1; # x равно 0.785398163397448 $x = atan2 1, 0; # x равно 1.5707963267949 $x = atan2 0, -1; # x равно 3.14159265358979 Функция cosСинтаксис: cos число Аргументы: число числовое выражение Результат: числовое значение Функция cos возвращает косинус числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры: $pi = atan2 0, -1; $x = cos 0; # x равно 1 $x = cos $pi/2; # x равно 6e-17 (почти 0) $x = cos $pi; # x равно -1 Функция expСинтаксис: exp число Аргументы: число числовое выражение Результат: числовое значение Функция exp возвращает экспоненту числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если число больше 709.78, то возвращается 1.#INF. Пример: print exp 1; # 2.71828182845905 Функция intСинтаксис: int число Аргументы: число числовое выражение Результат: числовое значение Функция int возвращает целую часть числа. Если аргумент опущен, то число принимается равным значению переменной $_. Пример: print int 1.5; # 1 print int -1.5; # -1 Функция logСинтаксис: log число Аргументы: число числовое выражение Результат: числовое значение Функция log возвращает натуральный логарифм числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если аргумент меньше или равен нулю, то возникает фатальная ошибка исполнения. Пример: print log 2.71828182845905; # 1 Функция randСинтаксис: rand число Аргументы: число числовое выражение Результат: числовое значение Функция rand возвращает случайное число, большее или равное нулю и меньшее числа, которое должно быть положительным. Если аргумент опущен, то число принимается равным 1. Если функция srand() еще не вызывалась, то автоматически вызывает ее. Функция sinСинтаксис: sin число Аргументы: число числовое выражение Результат: числовое значение Функция sin возвращает синус числа. Если аргумент опущен, то число принимается равным значению переменной $_. Примеры: $pi = atan2 0, -1; $x = sin 0; # x равно 0 $x = sin $pi/2; # x равно 1 $x = sin -$pi/2; # x равно -1 Функция sqrtСинтаксис: sqrt число Аргументы: число числовое выражение Результат: числовое значение Функция sqrt возвращает квадратный корень из числа. Если аргумент опущен, то число принимается равным значению переменной $_. Если аргумент меньше или равен нулю, то возникает фатальная ошибка исполнения. Пример: print sqrt 2; # 1.4142135623731 Функция srandСинтаксис: srand число Аргументы: число числовое выражение Функция srand инициализирует генератор случайных чисел rand(). Если ее аргумент опущен, то число генерируется исполняющей системой. Начиная с PERL 5.004, явный вызов этой функции не нужен, т. к. теперь она автоматически вызывается функцией rand() при первом обращении к ней. 6.9.2. Строковые функции
Функция chompСинтаксис: chomp строка chomp список Аргументы: строка строковое выражение список список строковых выражений Результат: числовое значение Функция chomp удаляет из строки концевую подстроку, соответствующую текущему разделителю записей, т. е. содержимому переменной $/. Если аргументом является список, то эта функция применяется к каждому элементу списка. Если аргумент опущен, то строка принимается равной значению переменной $_. Результатом функции является общее количество удаленных символов. Ее основным применением является удаление концевых символов перевода строки при построчном чтении текстового файла, например: while (<>) { chomp; # удаляем \n в конце считанной строки $_ . . . } Если $\ равно undef или содержит ссылку на число (для записей фиксированной длины), то эта функция ничего не удаляет. Функция chopСинтаксис: chop строка chop список Аргументы: строка строковое выражение список список строковых выражений Результат: строковое значение Функция chop удаляет из строки ее последний символ и возвращает его. Если аргументом является список, то эта функция применяется к каждому элементу списка и возвращает последний из удаленных символов. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример: $_ = 'abcde'; chop; print; # выводит 'abcd' Функция cryptСинтаксис: crypt строка, код Аргументы: строка, код строковые выражения Результат: строковое значение Функция crypt кодирует исходную строку с помощью строки код и возвращает результат. Код должен состоять из двух символов, лежащих в диапазоне [./0-9A-Za-z]. Парной функции декодировки в PERL'е нет, поэтому практического применения эта функция не имеет. Функция indexСинтаксис: index строка, подстрока, позиция? Аргументы: строка, подстрока строковые выражения позиция числовое выражение Результат: числовое значение Функция index ищет в строке заданную подстроку, начиная с заданной позиции или с начала строки, если позиция опущена. Она возвращает позицию найденной подстроки в исходной строке или -1, если подстрока не найдена. Пример: $str = 'Queen Mary'; print index($str, 'Mary'); # 6 print index($str, 'mary'); # -1 Функция lcСинтаксис: lc строка Аргументы: строка строковое выражение Результат: строковое значение Функция lc преобразует все символы строки в строчные буквы. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример: print lc 'ABCDE'; # abcde Функция lcfirstСинтаксис: lcfirst строка Аргументы: строка строковое выражение Результат: строковое значение Функция lcfirst преобразует первый символ строки в строчную букву. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример: print lcfirst 'ABCDE'; # aBCDE Функция lengthСинтаксис: length строка Аргументы: строка строковое выражение Результат: числовое значение Функция length возвращает количество символов в строке. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример: print length 'ABCDE'; # 5 Функция rindexСинтаксис: rindex строка, подстрока, позиция? Аргументы: строка, подстрока строковые выражения позиция числовое выражение Результат: числовое значение Функция rindex ищет в строке заданную подстроку справа налево, начиная с заданной позиции или с конца строки, если позиция опущена. Она возвращает позицию найденной подстроки в исходной строке или -1, если подстрока не найдена. Пример: print rindex('abcabc', 'abc'); # 3 Функция substrСинтаксис: substr строка, смещение, длина?, замена? Аргументы: строка, замена строковые выражения смещение, длина числовые выражения Результат: строковое значение Функция substr возвращает подстроку строки заданной длины, начиная с заданного смещения. Если смещение отрицательно, то оно отсчитывается от конца строки. Если длина опущена, то извлекаются символы до конца строки; если она отрицательна, то она складывается с длиной строки. Пример: print substr('abcdef', 1, -2); # bcd Если строка задана переменной, то эта функция может иметь четвертый аргумент, который задает строку, на которую заменяется заданная подстрока, например: $str = 'abcdef'; substr($str, 1, -2,'xxx'); print $str; # axxxef Этот пример можно записать и так: $str = 'abcdef'; substr($str, 1, -2) = 'xxx'; print $str; # axxxef Функция ucСинтаксис: uc строка Аргументы: строка строковое выражение Результат: строковое значение Функция uc преобразует все символы строки в прописные буквы. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример: print uc 'abcde'; # ABCDE Функция ucfirstСинтаксис: ucfirst строка Аргументы: строка строковое выражение Результат: строковое значение Функция ucfirst преобразует первый символ строки в прописную букву. Если аргумент опущен, то строка принимается равной значению переменной $_. Если использована директива use locale, то преобразование производится с учетом текущей национальной настройки. Пример: print ucfirst 'abcde'; # Abcde 6.9.3. Прочие скалярные функции
Функция chrСинтаксис: chr код Аргументы: код числовое выражение Результат: строковое значение Функция chr возвращает символ, имеющий заданный числовой код. Если аргумент опущен, то код принимается равным значению переменной $_. Пример: print chr 65; // A Функция hexСинтаксис: hex строка Аргументы: строка строковое выражение Результат: числовое значение Функция hex преобразует строку в шестнадцатеричное число. Если аргумент опущен, то строка принимается равной значению переменной $_. Например, все приведенные ниже операторы выведут на экран число 165: print hex '0xaf'; print hex 'xaf'; print hex '0af'; print hex 'af'; Функция octСинтаксис: oct строка Аргументы: строка строковое выражение Результат: числовое значение Функция oct преобразует строку в число. Если строка начинается с '0x', то она интерпретируется как шестнадцатеричное число; если она начинается с '0b', то интерпретируется как двоичное число; в остальных случаях она интерпретируется как восьмеричное число. Если аргумент опущен, то строка принимается равной значению переменной $_. Примеры: print oct '0xaf'; # 165 print oct '0b101'; # 5 print oct '0100'; # 64 print oct '100'; #64 Функция ordСинтаксис: ord строка Аргументы: строка строковое выражение Результат: числовое значение Функция ord возвращает числовой код первого символа строки. Если аргумент опущен, то строка принимается равной значению переменной $_. Пример: print ord 'ABC'; # 65 Функция packСинтаксис: pack шаблон, список Аргументы: шаблон строковое выражение список список скалярных выражений Результат: строковое значение Функция pack упаковывает заданный список значений в строку и возвращает его в качестве результата. Правила упаковки задаются строкой шаблон, которая состоит из символов, указывающих правила преобразования для элементов списка. Шаблон может содержать следующие символы:
Шаблоны подчиняются следующим правилам:
Примеры: $foo = pack("CCCC",65,66,67,68); # $foo = "ABCD" $foo = pack("C4",65,66,67,68); # $foo = "ABCD" $foo = pack("aaaa","abc","x","y","z"); # $foo = "axyz" $foo = pack("a14","abcdefg"); # "abcdefg\0\0\0\0\0\0\0" $foo = pack("s2",1,2); # $foo = "\1\0\2\0" в IBM PC, "\0\1\0\2" в Mac Функция unpackСинтаксис: unpack шаблон, строка Аргументы: шаблон, строка строковые выражения Результат: массив значений Функция pack распаковывает строку, упакованную функцией pack(). Она возвращает массив полученных в результате значений (в скалярном контексте возвращает первое полученное значение). Правила распаковки задаются строкой шаблон, строение которой то же, что и для pack(). Дополнительно шаблон может содержать перед буквой, задающей тип распаковки, префикс %n, который указывает, что мы хотим получить не результат распаковки, а его n-битовую контрольную сумму. Остальные подробности см. в описании функции pack(). Следующий пример демонстрирует эффективный способ подсчета количества единичных битов в переменной $mask: $setbits = unpack("%32b*", $mask); Функция vecСинтаксис: vec выражение, смещение, ширина Аргументы: выражение строковое выражение смещение, ширина числовые выражения Результат: числовое значение Функция vec рассматривает строку выражение как массив, состоящий из элементов заданной ширины в битах. Она извлекает элемент с заданным смещением и возвращает его. Ширина должна степенью числа 2 в диапазоне от 1 до 32 (или 64 на 64-битовых платформах), смещение трактуется как целое число без знака. Пример: $x = "\x10\x32\x54"; # $x = (0, 1, 2, 3, 4, 5) как вектор 4-битовых чисел print vec($x, 2, 4); # поэтому будет выведено число 2 Функция vec может использоваться в левой части оператора присваивания для формирования массива битовых групп в строке. Например, мы могли бы сформировать приведенную выше строку $x так: vec($x, $_, 4) = $_ foreach (0, 1, 2, 3, 4, 5); 6.9.4. Функции работы с регулярными выражениями
Функция posСинтаксис: pos аргумент Аргументы: аргумент строковая переменная Результат: числовое значение Функция pos возвращает позицию в строке аргумент после последнего сопоставления с модификатором g. Если аргумент опущен, то он принимается равным значению переменной $_. Эта функция может употребляться в левой части операции присваивания для задания новой позиции. Такое присваивание изменяет поведение метасимвола \G в последующих сопоставлениях. См. подробнее п. 6.4.6.1. Функция quotemetaСинтаксис: quotemeta аргумент Аргументы: аргумент строковое выражение Результат: строковое значение Функция quotemeta добавляет в строку аргумента символ '\' перед каждым символом, не являющимся латинской буквой или цифрой, и возвращает новую строку в качестве результата. Если аргумент опущен, то он принимается равным значению переменной $_. Это внутренняя функция, которая реализует метасимвол \Q. Пример: print quotemeta "abc123абв"; # "abc123\а\б\в" Функция splitСинтаксис: split образец, строка, предел Аргументы: образец регулярное выражение строка строковое выражение предел числовое выражение Результат: список строк Функция split расщепляет исходную строку на подстроки и возвращает список этих подстрок. В скалярном контексте она заносит список подстрок в массив @_ и возвращает его длину. Если строка опущена, то она принимается равной значению переменной $_. Разбиение на подстроки происходит в позициях сопоставления с заданным образцом; если он опущен, то разбиение производится по символу пробела, при этом начальные пробелы в каждой подстроке удаляются. Если образец содержит круглые скобки, то подстроки, сопоставляемые с выражением в скобках, включаются в результирующий список как отдельные элементы. Если предел задан и положителен, то он задает максимально допустимое количество извлекаемых подстрок. Если он опущен или равен нулю, то конечные пустые подстроки не включаются в результирующий список. Если же он отрицательный, то возвращаются все извлеченные подстроки. Примеры: @_ = split(/,/, 'a,b,c,d,'); # @_ = ('a', 'b', 'c', 'd') @_ = split(/,/, 'a,b,c,d,', 3); # @_ = ('a', 'b', 'c,d,') @_ = split(/,/, 'a,b,c,d,', -3); # @_ = ('a', 'b', 'c', 'd', '') @_ = split(/(,)/, 'a,b,c,d,'); # @_ = ('a', ',', 'b', ',', 'c', ',', 'd', ',') Функция studyСинтаксис: study строка Аргументы: строка строковое выражение Результат: нет Функция study компилирует строку (или значение переменной $_, если она опущена) во внутреннее представление. Если строку предполагается многократно сопоставлять с образцом, то ее компиляция может сэкономить время при последующих операциях сопоставления. В каждый момент времени только одна строка может быть скомпилирована; применение функции study к другой строке отменяет компиляцию текущей строки. Пример: while (<>) { study; print "Мое\n" if /\bменя\b/; print "Твое\n" if /\bтебя\b/; ... } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||