Все задачи

Хочу определенности

15 Apr 2013

Программист написал функцию, которая должна возвращать первый из своих аргументов, который является определенным (defined) значением, или undef, если определенных значений нет:

sub first_defined
{
    for (@_) {
        return if defined;
    }
    return undef;
}

Но что-то с этой функцией не заладилось…

Подсказка

Показать

$_ – очень удобная переменная, с которой готовы неявно работатать почти все встроенные функции perl’а!

Подсказка-2

Показать

Но разве return работает по умолчанию с переменной $_?

Разоблачение

Показать

Нет, return не работает по умолчанию с переменной $_. Если в return не указано явного значения, он возвращает undef в скалаярном контектсе и пустой список в списковом.

В то же время функция defined, если не указан ее аргумент, проверяет именно переменную $_. Так что самое короткое исправление могло бы быть таким:

sub first_defined
{
    for (@_) {
        return $_ if defined;
    }
    return undef;
}