На этом шаге мы рассмотрим общие принципы передачи параметров в подпрограммы.
Информация в подпрограмму и обратно передается через параметры (аргументы). Для передачи параметров в подпрограмму используется специальный массив @_. Все параметры запоминаются в элементах массива $_[0], $_ [1] и т. д. Такой механизм позволяет передавать в подпрограмму произвольное количество параметров.
Массив @_ является локальным для данной подпрограммы, но его элементы - это псевдонимы действительных скалярных параметров. Изменение элемента массива @_ вызывает изменение соответствующего действительного параметра.
В языках профаммирования различают передачу параметров по ссылке и по значению. При передаче параметров по значению подпрограмма получает копию переменной. Изменение копии внутри подпрограммы не влияет на ее оригинал. При передаче параметров по ссылке подпрограмма получает доступ к самой переменной и может ее изменять.
Передача параметров через специальный массив @_ фактически является передачей параметров по ссылке. В языке Perl можно реализовать передачу параметров по значению, если внутри подпрограммы при помощи функции my() объявить локальные переменные и присвоить им значения фактических параметров из массива @_, как это сделано в следующем примере.
#! perl -w # Передача в подпрограмму параметров по значению sub f { my($x,$y) = @_; return (++$x * --$y); } $val = f(9,11); print "Значение (9+1) * (11-1) равно $val.\n"; $x = 9; $y = 11; $val = f($x,$y); print "Значение ($x+1) * ($y-1) равно $val.\n"; print "Значение \$x остается равным $x, а \$y равным $y.\n";
Результат его работы приведен на рисунке 1.
Рис.1. Результат работы приложения
Со следующего шага мы начнем рассматривать передачу по ссылке параметров-массивов.