Posts Tagged ‘подпрограмма’

Модули (packages).

В Perl реализован механизм модулей. Модуль это группа подпрограмм и переменных обычно включенных в один файл. Внутри одного модуля можно определить другой модуль. Начало модуля определяется директивой:

packages имя_модуля;
Конец модуля это конец блока или файла. Головной модуль имеет по умолчанию имя main. На имя внутри модуля можно ссылаться, добавляя ‘::’ после имени модуля.

Например:

$main::var1 - переменная в головном модуле.
::var1 - то же самое. Имя main можно опускать.
$модуль1::var1 - переменная в модуле ‘модуль1′
$модуль1::модуль2::var1 — Модуль2 содержится в модуле 1.
Только идентификаторы, начинающиеся с буквы или символа ‘_’, хранятся в пространстве имен текущего модуля. Остальные хранятся в пространстве головного модуля main. Кроме этого имена STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC и SIG так же хранятся в головном модуле.
(далее…)

Подпрограммы.

Для применения подпрограммы ее необходимо определить либо в текущем модуле (файле), либо во внешнем модуле (файле). Подпрограммы определяются и декларируются следующим образом:

sub имя; — Только декларация. Определение ниже.
sub имя (прототипы); — То же но с декларацией параметров.
sub имя блок; — Декларация и определение.
sub имя (прототипы) блок; — То же, но с параметрами.
Для определения динамической анонимной подпрограммы можно указать:
$переменная = sub блок;
Для импортирования подпрограмм из других модулей используйте:
use модуль qw(подпрограмма1 подпрограмма2 );
Вызов подпрограммы:
имя(список параметров); # символ ‘&’ можно не указывать.
имя список; # Если подпрограмма уже декларирована.
&имя; # Параметры в @_
Все параметры передаются подпрограмме как массив @_. Соответственно $_[0] — первый параметр, $_[1] — второй и т.д. Массив @_ — локальный, но он содержит адреса параметров, поэтому можно изменять значение параметров. Возвращаемое значение подпрограммы — результат последнего оператора. Это может быть как скаляр так и массив. Можно принудительно возвращать результат используя функцию return().
(далее…)