Подобно определению термина в словаре, при определении подпрограммы (subroutine definition) с ее именем сопоставляется последовательность действий, которую нужно выполнить. Подпрограммы определяются с помощью ключевого слова
# определение подпрограммы:
sub say_hello { # имя подпрограммы
if ($language eq 'ru') { # тело подпрограммы
print 'Здравствуйте!';
} elsif ($language eq 'ja') {
print 'Konnichi-wa!';
} else {
print 'Hello!';
}
}
$language = 'ru'; # напечатать приветствие по-русски
say_hello; # вызов подпрограммы
Определение подпрограмм может располагаться в любом месте программного файла. (Можно даже перемежать определения подпрограмм выполняемыми предложениями программы, поскольку определения пропускаются при выполнении. Но разбираться в логике такой программы будет непросто!) Из соображений практического удобства, определения подпрограмм часто располагают в исходном тексте после основной программы, чтобы вначале ознакомиться с общей логикой программы. Но это дело вкуса: например, разработчики, привыкшие программировать на Pascal или C, располагают определения подпрограмм в начале исходного текста.
В Perl все подпрограммы всегда возвращают значения. Если не указано ничего иного, возвращаемым значением будет значение последнего вычисленного в подпрограмме выражения. В следующем примере функция
sub dice { # бросаем игральные кости:
(int(rand 6)+1, int(rand 6)+1); # два случайных числа
}
Также в Perl есть встроенная функция возврата из подпрограммы
sub greeting { # приветствие в зависимости от времени суток
my $hours = (localtime)[2]; # текущие часы
if ($hours >= 4 and $hours < 12) {
return 'Доброе утро';
} elsif ($hours >= 12 and $hours < 18) {
return 'Добрый день';
} elsif ($hours >= 18 and $hours < 22) {
return 'Добрый вечер';
} else {
return 'Доброй ночи';
}
}
print greeting(), '!';
Если выражение не указано, возвращается пустой список в списочном контексте и неопределенное значение
sub get_file_size { # узнать размер файла
return -s $file # вернуть размер, в т.ч. 0,
if -e $file; # если файл существует
return; # файла нет, вернуть undef
}
Использование
Помня о том, что списки в Perl - одномерные, становится понятным, что подпрограмма в Perl может возвращать только один список. Например, если в ней записано
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии