Передать ноль в Getopt :: Std - PullRequest
       5

Передать ноль в Getopt :: Std

4 голосов
/ 07 сентября 2010

Я использую Getopt::Std в скрипте Perl и хотел бы передать в качестве значения ноль.Я проверяю, что значения установлены правильно, используя unless().В настоящее время unless() отклоняет значение как неустановленное.

Есть ли способ получить unless() для принятия нуля в качестве допустимого значения (допустимо любое неотрицательное целое число).1008 * Это, вероятно, очень просто, но я никогда не касался Perl несколько дней назад!

Rich

Ответы [ 2 ]

9 голосов
/ 07 сентября 2010

Вам нужно использовать unless defined <SOMETHING> вместо unless <SOMETHING>, потому что ноль - это ложь в Perl.

3 голосов
/ 07 сентября 2010

Perl 5 имеет несколько ложных значений : 0, "0", "", undef, ().

Важно отметить, что некоторые вещиможет показаться, что они должны быть ложными, но это не так.Например, 0.0 является ложным, поскольку это число эквивалентно 0, но "0.0" - нет (единственные строки, которые являются ложными, - это пустая строка ("") и "0").

У этого также есть понятие определенности.Считается, что переменная, для которой назначено значение (отличное от undef), определена и вернет true при проверке с помощью функции defined.

При условии, что вам нужен аргументчтобы быть неотрицательным целым числом, лучше проверить это:

unless (defined $value and $value =~ /^[0-9]+$/) {
    #blah
}
...