|
отипы); То же но с декларацией параметров.
sub имя блок; # Декларация и определение.
sub имя (прототипы) блок; # То же, но с парамметрами.
Для определения динамичской анонимной подпрограммы можно указать:
$переменная = sub блок;
Для импортирования подпрограмм из других модулей используйте:
use модуль qw(подпрограмма1 подпрограмма2 );
Вызов подпрограммы:
имя(список параметров); # символ '&' можно не указывать.
имя список; # Если подпрогрмма уже декларирована.
&имя; # Параметры в @_
Все параметры передаются подпрограмме как массив @_.
Соответсвенно $_[0] - первый параметр, $_[1] - второй и т.д.
Массив @_ - локальный, но он содержит адреса параметров поэтому
можно изменять значение параметров.
Возвращаемое значение подпрограммы - результат последнего оператора.
Это может быть как скаляр так и массив. Можно принудительно возвращать
результат используя функцию return().
Подпрограмму можно вызвать используя префикс '&' перед именем
подпрограммы. Если подпрограмма предварительно продекларирована то
префикс и скобки можно опустить.
Private переменные.
Для применения переменных доступных только внутри блока или подпрограммы
необходимо определить их с помощью функции my(список).
Если переменная одна то скобки можно опустить.
my() декларирует private переменные в пределах текущей подпрограммы,
блока, функции eval() или do/require/use файлов. Private переменные
аналогичны auto переменным в С.
Пример:
# Программа вычисления факториала.
print fact(3); # вычислить факториал 3*2*1
sub fact # Определяем подпрограмму.
{ my $m; # private переменная но не local !
$m = $_[0];
return 1 if $m <= 1;
return($m * fact($m -1));
}
Можно указывать начальные значения private переменных как:
my(список) = выражение;
Так для вышеприведенного примера лучше было написать:
my($m) = $_[0];
Переменные типа local.
В общем лучше использовать private переменные так-как это надежней и
быстрее. private переменные обеспечивают лексическую область применения
(видимости) а local - динамическую. Обычно это переменные форматов
значение которых должно быть видимо из вызываемых подпрограмм.
Примен
|
|