Определение подпрограммы

Подпрограммы в языке Perl играют ту же роль, что и функции в языке С или процедуры и функции в языке Pascal. Они выполняют две основные задачи:
В языке Perl не различаются понятия «подпрограммам и «функция», эти слова являются синонимами.
Подпрограмма может быть определена в любом месте основной программы при помощи описания
sub name [(proto)] [{block}];
Здесь
Форма
sub name [(proto)];
представляет собой предварительное объявление подпрограммы без ее определения. Пользователь, предпочитающий помещать описания всех подпрограмм в конце основной программы, должен при вызове еще не определенной функции использовать специальный синтаксис &name или name( ). Если же некоторое имя предварительно объявить в качестве имени функции, то сразу после объявления к этой функции можно обращаться просто по имени без применения специального синтаксиса.
Листинг 9.1. Определение подпрограммы
#!/usr/bin/perl 
sub max {
  my $maximum = shift @$_;
  my $x;
  foreach $x (@_) { 
    $maximum = $x if ($x > $maximum);
  }
  return $maximum
}
print "Наибольший аргумент=", mах(3,5,17,9), "\n";
В данном примере процедура max( ) возвращает наибольший из своих аргументов.
Данный способ определения подпрограмм не является единственным. Существуют и другие варианты:
Конструкция do filename вызывает выполнение Perl-программы, содержащейся в файле filename. Если файл filename недоступен для чтения, функция do возвращает неопределенное значение и присваивает соответствующее значение специальной переменной $!. Если файл filename может быть прочитан, но возникают ошибки при его компиляции или выполнении, то функция do возвращает неопределенное значение и помешает в переменную $@ сообщение с указанием строки, содержащей ошибку. Если компиляция прошла успешно, функция do возвращает значение последнего выражения, вычисленного в файле filename.
ПРИМЕЧАНИЕ Специальная переменная $! служит для хранения сообщения о последней системной ошибке, то есть об ошибке, возникающей при обращении к операционной системе с запросом на предоставление некоторой услуги, как, например, создание файла, чтение файла или запись в файл.
Специальная переменная $@ используется для хранения сообщения, генерируемого при последнем обращении к функциям eval( ) или do filename
Листинг 9.2. Применение конструкции do filename
# файл "1.pl";
#!/usr/bin/perl
do "2.pl";
print "ошибка:  $@\n" if $@;
do "3.pl";
print "системная ошибка:  $!\n" if $!;
# файл "2.pl";
$х = 1;
$y = 0;
$z = $x/$y;
print "z= $z\n";
Perl-программа 1.pl, используя конструкцию do filename, пытается выполнить сценарии, содержащиеся в файлах 2.pl и 3.р1 Первый из них содержит в третьей строке операцию деления на 0, которая вызовет появление ошибки во время выполнения программы, а второй вообще не существует. В результате выполнения файла 1.pl будут выведены следующие сообщения:
ошибка: Illegal division by zero at 2.pl line 3. 
системная ошибка: No such file or directory
Ключевые слова use и require используются для включения в текущую программу подпрограмм из других модулей.

Следующая страница Содержание главы


Реклама