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

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

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 в скалярном контексте или пустой список в списочном контексте. В частности, так можно вернуть признак ошибки и сообщить вызывающей стороне, что вернуть более осмысленное значение невозможно.
Теги:
функции
Добавлено: 20 Июля 2018 08:10:42 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...