Как и все структурированные языки программирования, Perl поддерживает подпрограммы. Подпрограмма может быть определена спомощью ключевого слова sub, как показано ниже:
sub demo_sub { print "demo_sub called\n"; } &demo_sub; # вызов подпрограммы
В данном случае инструкции образуют подпрограмму, названную demo_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);
Библиотека подпрограмм
В противоположность языку С, Perl фактически не поддерживает концепцию библиотеки. Тем не менее, в нем имеется механизм, позволяющий скриптам использовать исходный код из другого файла. Например, предположим, что вы храните подпрограмму add_valuesl вфайле под именем addvalue.pl. Используя инструкцию require, другой скрипт на языке Perl может получить доступ к той подпрограмме, как показано ниже:
require "addvalue.pl"; print &add_values(10,11);
Вы можете представлять себе инструкцию require как аналогоператора #include препроцессора языка С. Чтобы найти файл исходных кодов, Perl сначала ищет в каталоге, определенном по умолчанию для библиотеки языка Perl (подробности можно уточнить в инструкции по инсталляции), а затем в текущем каталоге. Можно также использовать абсолютный или относительный путь, к которому добавлено имя файла. Perl запоминает, какие файлы были затребованы оператором require, и загружает их только один раз даже в случае многочисленных обращений к этим файлам. Имеется много стандартных библиотек, которые расширяют возможности языка Perl. Сейчас самое время побродить по каталогу, в котором хранятся библиотечные файлы языка Perl, чтобы получить представление о тех возможностях, которые они предлагают.
1 2
8 8 8
| |