Функции defined и undef в perl — как с ними работать

Функция defined

Функция возвращает булево значение, и отвечает на вопрос: содержит EXPR определенное значение или нет.

Функция вернет false, если переменная еще не была инициализирована или ей было присвоено значение undef. True - если переменная была инициализирована любым значением, в том числе ей может быть присвоено значение числового нуля, пустой строки или строки содержащей символ нуля.

Именно этим defined отличается от стандартной булевой проверки, которая не может отличить undef от "0".

Результат:

Функция undef

Функция undef всегда возвращает неопределенное значение. Если передать функции в качестве аргумента переменную - она присвоит ей неопределенное значение.

Есть небольшой интересный нюанс в использовании undef - не стоит использовать эту функцию для сравнения с переменными. Сравнение заданной переменной будет выполняться с числовым нулем или пустой строкой, а не с неопределенным значением. Результатом могут стать парадоксальные ситуации и ошибки.

Пример:

Вывод:

Функции defined и undef в perl — как с ними работать: 1 комментарий

  1. Omen

    У меня вопрос. Вроде всё понятно, но..

    while ($_ = $ARGV[0], /^-/) {
    if(/^-d/ || /^-s/ || /^-e/) {
    print $ARGV[0], "\n";
    }
    else {
    print "Неизвестный ключ $ARGV[0]\n";
    }
    shift if defined $_;
    }

    Матюкается:
    Use of uninitialized value $_ in pattern match (m//) at argv_shift.pl line 15.
    Это строка в которой shift if...

    У меня включена прагма strict. Нужна она мне.
    Чё не понимаю?

Комментарии запрещены.