Нескалярные возвращаемые значения

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

sub list_from_fred_to_barney {
if ($fred < $barney) {
# Отсчет по возрастанию от $fred к $barney
$fred..$barney;
} else {
# Отсчет по убыванию от $fred к $barney
reverse $barney..$fred;
}
}
$fred = 11;
$barney = 6;
@c = &list_from_fred_to_barney; # @c содержит (11, 10, 9, 8, 7, 6)

В этом примере диапазонный оператор создает список от 6 до 11, а затем функция reverse обращает список, чтобы он убывал от $fred (11) до $barney (6). Наконец, функция может не возвращать ничего. Вызов return без аргументов вернет undef в скалярном контексте или пустой список в списочном контексте. В частности, так можно вернуть признак ошибки и сообщить вызывающей стороне, что вернуть более осмысленное значение невозможно.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Аргументы
Возвращаемые значения
Вызов пользовательской функции
Вызов функции без &
Директива use strict

Вернуться в раздел: Perl / 3. Пользовательские функции