Если $var1
ложно, подпрограмма вернет значение $var1
.
Если $var1
истина, но отличается от $var2
, подпрограмма вернет скаляр, содержащийцелое число 0
, число с плавающей точкой 0
и пустая строка.
Но я бы не стал явно проверять какие-либо из этих значений.Все они являются законными ценностями, и их слишком сложно проверить для каждого.
Вместо этого вы должны нормализовать.
is(isVar1Valid($input) ? 1 : 0, 0);
Еще лучше, используйте ok
вместо is
.
ok(!isVar1Valid($input));
Кстати,обратите внимание, что следующая конструкция немного странна:
$var1 && $var1 eq $var2
Цель первой проверки, вероятно, состоит в том, чтобы избежать "неинициализированного" предупреждения.Если это так, то лучше сообщить об этом читателю, используя вместо этого следующее:
defined($var1) && $var1 eq $var2
Это важно, поскольку вторая версия не эквивалентна второй, если $var2
может быть ложным.