Шаг 114.
Передача параметров (общие сведения)

    На этом шаге мы рассмотрим общие принципы передачи параметров в подпрограммы.

    Информация в подпрограмму и обратно передается через параметры (аргументы). Для передачи параметров в подпрограмму используется специальный массив @_. Все параметры запоминаются в элементах массива $_[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. Результат работы приложения

    Со следующего шага мы начнем рассматривать передачу по ссылке параметров-массивов.




Предыдущий шаг Содержание Следующий шаг