Некоторые сведения о Perl 5/Встроенные функции

Материал из Викиучебника — открытых книг для открытого мира

Perl 5 предоставляет широкий спектр встроенных функций, часть из которых доступна с момента начала исполнения Perl-программы,[1] в то время как другие могут требовать подключения (require, use) дополнительных встроенных (поставляемых как часть Perl 5) модулей. В данном разделе мы рассмотрим, в первую очередь, функции первой из этих групп.

Управление выполнением[править]

Функция die вызывает исключение. В случае, если исключение не перехвачено (например, функцией eval), оно приведет к аварийному завершению текущей Perl-программы. Например:

my $points = throw_dice ()
    or die ("Out of luck");

Функция eval выполняет блок, перехватывая исключения. Результат функции eval — результат последнего вычисленного выражения. Особая переменная $EVAL_ERROR ($@) устанавливается в пустую строку при успешном завершении блока, или же содержит перехваченное исключение в противном случае.[2] Например:

print (eval { 42; }, "\n");
## → 42␤
eval { print "Ouch!\n"; die ("Oops!\n"); };
## → Ouch!␤
use English;
print ($EVAL_ERROR, "\n");
## → Oops!␤␤

Функция exit позволяет завершить текущий процесс (как правило: Perl-программу), указав числовой код завершения (по-умолчанию: 0.) Обычные соглашения трактуют код завершения 0 как успех, любой другой код означает ошибку исполнения. Обычно, для аварийного завершения программы имеет смысл применять функцию die.

Числовые функции[править]

Приведение форм[править]

hex
разбор строки, содержащей шестнадцатеричное представление числа; например, hex ("22") → 34 (= 22₁₆);
oct
разбор двоичной (если начинается с 0b), шестнадцатиричной (0x) или восьмеричной (во всех прочих случаях) записи числа; ведущие пробелы игнорируются; так, oct (" 0b10101") → 21;
int
приводит аргумент к целому типу с отсечением дробной части (другими словами: с округлением к нулю); так, значением int (-1.99) окажется −1; в вычислениях, как правило, более уместны функции ceil и floor модуля POSIX[3];
chr, ord
получение строки, состоящей из символа с заданным кодом, и получение кода первого символа строки; например: chr (0x263a), ord ("§")("☺", "167").

Интерфейс к стандартной математической библиотеке[править]

Perl 5 предоставляет (хотя и несколько ограниченный — если не использовать модуль POSIX[3]) интерфейс к стандартной математической библиотеке:[4]

exp, log, sqrt
возведение основания натуральных логарифмов в указанную степень, натуральный логарифм и квадратный корень аргумента, соответственно;
отметим, что возвести произвольное число в произвольную степень можно оператором **, соответствующем функции pow[5] стандартной библиотеки;
cos, sin
косинус и синус угла в радианах;
atan2
арктангенс отношения первого аргумента ко второму (другими словами: угол в радианах между вектором с заданными — y, x — координатами и осью абсцисс);
отметим, что ввиду равенства 𝜋 = 4 arctg 1, приближенное значение для константы 𝜋 можно получить как my $pi = 4 * atan (1, 1); (или же можно воспользоваться функцией pi модуля Math::Trig[6].)

Ввод-вывод[править]

Функция print (равнозначна методу print для объектов класса IO::Handle[7]) последовательно выводит аргументы в указанный поток (по-умолчанию: на стандартный вывод), разделяя их разделителем полей $OFS ($OUTPUT_FIELD_SEPARATOR, $,; по-умолчанию: пустая строка) и завершая вывод разделителем записей $ORS ($OUTPUT_RECORD_SEPARATOR, $\; по-умолчанию: пустая строка.)[8] Например:

use English;
my ($a, @ll)
    = ("a", qw (little lamb));
local ($OFS, $ORS)
    = (" ", "\n");
print (qw (Mary had), $a, @ll);
## → Mary had a little lamb␤

Функция warn предназначена для вывода предупреждений. Управлять их обработкой можно поместив ссылку на нужную функцию в элемент __WARN__ особой таблицы %SIG[9]; по-умолчанию, предупреждение будет выведено на стандартный поток ошибок подобно функции die. (В отличие от последней, warn не приводит, разумеется, к аварийному завершению кода.) Например:

warn ("It makes me worry\n");
## (STDERR) → It makes me worry␤

Ссылки[править]

  1. https://metacpan.org/pod/perlfunc
  2. https://metacpan.org/pod/perlvar#EVAL_ERROR
  3. а б https://metacpan.org/pod/POSIX
  4. http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html#tag_13_25_07
  5. http://pubs.opengroup.org/onlinepubs/9699919799/functions/pow.html
  6. https://metacpan.org/pod/Math::Trig
  7. https://metacpan.org/pod/IO::Handle
  8. https://metacpan.org/pod/perlvar#Variables-related-to-filehandles
  9. https://metacpan.org/pod/perlvar#SIG