Почему моя программа Perl печатает справочное сообщение, когда аргумент имеет значение 0?

StackOverflow https://stackoverflow.com/questions/2417929

Вопрос

Если я сделаю это:

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 к исходному вопросу.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top