Почему моя программа Perl печатает справочное сообщение, когда аргумент имеет значение 0?
-
19-09-2019 - |
Вопрос
Если я сделаю это:
GetOptions(
'u=s' => \$in_username,
'r=i' => \$in_readonly,
'b=i' => \$in_backup
);
exit usage() unless $in_username && $in_readonly && $in_backup;
и вызовите программу следующим образом:
./app.pl -u david -r 12 -b 0
это всегда приводит к вызову метода use(), поэтому очевидно, что 0 не рассматривается как целочисленное значение.Что я могу сделать, принимая целочисленные значения AND 0?
Решение
Если 0 рассматривается как логическое значение, Perl считает его ложным значением.
Вам нужно что-то вроде
exit usage() unless defined($in_username) && defined($in_readonly) && defined(in_backup);
РЕДАКТИРОВАТЬ
Также ознакомьтесь с отличным комментарием msw к исходному вопросу.
Не связан с StackOverflow