Как и все структурированные языки программирования, Perl поддерживает подпрограммы. Подпрограмма может быть определена с помощью ключевого слова sub , как показано ниже:
sub demo_sub
{
print “demo_sub called\n”;
}
& demo _ sub ; # вызов подпрограммы
В данном случае инструкции образуют подпрограмму, названную d emo _ sub . Для вызова подпрограммы скрипт помещает знак амперсанда (&) перед именем подпрограммы. При вызове подпрограммы в языке Perl скобки могут быть опущены.
Вы можете разместить подпрограмму где угодно в пределах исходного кода скрипта, потому что Perl проанализирует весь исходный текст перед тем, как начать выполнение скрипта. Можно объявить подпрограмму в исходном коде сразу после первого использования подпрограммы ( forward reference ).
Подпрограммы могут иметь аргументы и возвращать значения. Следующий фрагмент кода содержит подпрограмму с именем show _ value , которая выводит значение, полученное подпрограммой в качестве параметра:
sub show_value
{
print ‘The value id ’, $_[0];
}
& show _ value (1001);
Формально подпрограмма языка Perl не объявляет переменных для хранения аргументов. Вместо этого в подпрограмму передается переменная типа массив с именем @_, которая содержит значения параметров. В свою очередь, подпрограмма получает доступ к значениям аргументов, используя следующие обозначения для элементов массива: $_[0], $_[1], и т. д. Однако такой способ передачи параметров может ухудшать читаемость кода, и поэтому большинство подпрограмм используют копирование аргументов в локальные переменные.
Аналогично предыдущему примеру, следующая подпрограмма show _ fwo _ values выводит значения двух параметров:
sub show_two_values
{
print ‘Первый параметр ’, $_[0], “\ n ”;
print ‘Второй параметр ’, $_[0], “\ n ”;
}
&show_two_values(1001, 2002);
Наконец, следующая функция show _ all _ values выводит значения всех параметров, которые она получает. Функция использует массив для определения числа параметром:
sub show_all_values
{
for ($i = 0; $i < @_; $i++)
{
print ‘Parametr ’, $i, ‘ is ’, $_[$i], “\n”;
}
}
& show_all_values(1001,2002,3003,4004);
Как было сказано, подпрограммы Perl могут возвращать значения. Для этого используется инструкция return . В противоположность языку С, Perl не требует обязательного использования инструкции return . Если подпрограмма не содержит инструкцию return , то в качестве возвращаемого значения будет взято последнее оцененное выражение. В следующем примере складываются два параметра и возвращается результат:
sub add_values
{
return $_[0] + $_[1];
}
print ‘The result is: ’, &add_values(1001,2002);