Читаем Язык программирования Perl полностью

В Perl программисту предоставляется возможность выполнить во время компиляции ограниченную проверку количества и типов параметров у подпрограммы. Это делается с помощью прототипа списка параметров. Для этого в определении и в объявлении подпрограммы после ее имени в круглых скобках указывается прототип. Прототип представляет из себя последовательность разыменовывающих суффиксов, определяющих количество параметров подпрограммы и типы их контекстов. Вот несколько примеров определения подпрограмм с прототипами:


# определение подпрограммы с 1-м параметром-скаляром sub list_mp3 ($) { my $path = $_[0]; # ... } # определение подпрограммы c 2-мя скалярными параметрами sub translate ($$@) { # и списком скаляров my ($from_lang, $to_lang, @words) = @_; # ... } sub generate_test(); # объявление подпрограммы без параметров


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


list_mp3 @dirs; # будет передан 1 скаляр: scalar @dirs


Перечень символов, применяемых для описания прототипов, с примерами определения подпрограмм приведен в таблице 12.1.

Таблица 12.1. Обозначение прототипов подпрограмм
ПрототипТребования к параметрамПример определения / описанияПример вызова
()отсутствие аргументовsub mytime ()mytime;
$скалярное значениеsub myrand ($) sub myrename ($$)myrand 100; myrename $old, $new;
@список скалярных значений (поглощает остальные параметры, поэтому употребляется последним в списке)sub myreverse (@) sub myjoin ($@)myreverse $a, $b, $c; myjoin ':', $x, $y, $z;
&подпрограммаsub mygrep (&@)mygrep {/pat/} $a, $b, $c;
*элемент таблицы символов (например, дескриптор файла)sub myopen (*$)myopen HANDLE, $name;
\взятие ссылки на следующий за ней прототипsub mykeys (\%) sub mypop (\@) sub mypush(\@@)mykeys %hash; mypop @array; mypush @stack, $a, $b;
;разделитель обязательных параметров от необязательных (в конце списка)sub mysubstr ($$;$)mysubstr $str, $pos; mysubstr $str, $pos, $length;

Проверки на соответствие прототипам не выполняются, если подпрограмма вызывается устаревшим способом (с префиксом &), а также для методов и подпрограмм, вызываемых через ссылки.

Скалярные переменные могут хранить ссылки не только на данные, но и на подпрограммы. В операции взятия ссылки имя подпрограммы должно использоваться с разыменовывающим префиксом &, как это показано в следующем примере:


$ref2max = \&max # взятие ссылки на подпрограмму sub max { # вычисляет максимум из списка значений my $maximum = shift; foreach (@_) { $maximum = $_ if ($_ > $maximum); } return $maximum; } print ref($ref2max); # будет выведено: CODE


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


$max_of_list = $ref2max->(@list_of_numbers);


Другая форма обращения к подпрограмме с использованием ссылочной переменной предполагает использование префикса &:


Перейти на страницу:

Похожие книги

Информатика: аппаратные средства персонального компьютера
Информатика: аппаратные средства персонального компьютера

Рассмотрены основы информатики и описаны современные аппаратные средства персонального компьютера. Сформулированы подходы к определению основных понятий в области информатики и раскрыто их содержание. Дана классификация современных аппаратных средств персонального компьютера и приведены их основные характеристики. Все основные положения иллюстрированы примерами, в которых при решении конкретных задач используются соответствующие программные средства.Рекомендуется для подготовки по дисциплине «Информатика». Для студентов, аспирантов, преподавателей вузов и всех интересующихся вопросами современных информационных технологий.

Владимир Николаевич Яшин

Зарубежная компьютерная, околокомпьютерная литература / Прочая компьютерная литература / Книги по IT