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

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

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

Это, наверное, очень просто, но несколько дней назад я никогда не прикасался к Perl!

Богатый


person Rich    schedule 07.09.2010    source источник
comment
Что вы подразумеваете под «передавать ноль как значение»? Является ли это параметром командной строки — как в «cmd -0» (сопоставимо с xargs -0)? Или как один из аргументов функции getopt из Getopt::Std? Как написано, ваш вопрос не ясен.   -  person Jonathan Leffler    schedule 07.09.2010
comment
Извините, вы правы. Я хочу сделать perl myScript -c 0 и unless($opt_c), чтобы вернуть true.   -  person Rich    schedule 08.09.2010


Ответы (2)


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

person DVK    schedule 07.09.2010

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

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

Он также имеет понятие определенности. Переменная, которой присвоено значение (отличное от undef), считается определенной и возвращает значение true при проверке с помощью defined.

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

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