П2.4.5.1 Подпрограммы
П2.4.5.1 Подпрограммы
Описать и использовать подпрограмму можно несколькими способами:
- sub NAME; - подразумевает описание в дальнейшем тела подпрограммы.
- sub NAME BLOCK - непосредственное описание.
- $subref = sub BLOCK - анонимное описание.
- use PACKAGE qw(NAME1, NAME2, NAME3) - включение подпрограмм из модулей.
- &NAME(LIST) - скобки обязательны для & формы.
- NAME(LIST) - & не обязательно со скобками.
- NAME LIST - скобки можно опустить в случае предварительного описания или включения подпрограммы из модуля.
Вызвать подпрограмму можно тоже несколькими способами:
Аргументы передаются подпрограмме в виде локального массива @_, его элементы являются ссылками на реальные скалярные параметры. Подпрограмма возвращает значение, полученное в результате исполнения последнего оператора подпрограммы. Как уже говорилось, подпрограмма вызывается использованием префикса & перед ее именем, в Perl 5 этот префикс не обязателен. Пример: sub MAX { my $max = pop(@_); foreach $foo (@_) { $max = $foo if $max < $foo; } $max; } ... $bestmark = &MAX(1,2,3,4,5);
Подпрограмма может вызываться рекурсивно. Если подпрограмма вызывается с использованием & формы, то список аргументов необязателен. Если вы хотите создать внутри модуля его собственную, невидимую снаружи подпрограмму, то описание должно быть анонимным: my $subref = sub {...} &$subref(1,2,3);