Perl имеет два набора операторов сравнения.
Те, которые выглядят как математические (==
, !=
, >
и т. Д.), Выполняют числовое сравнение.
Те, которые похожи на слова (eq
, ne
, gt
и т. Д.), Сравнивают строки.
У вас есть следующее:
if ($a == "quit") {
...
if ($a == "add" || "add item") {
...
} elsif ($a == "list" || "look at list") {
...
} elsif ($a == "reset"){
Все этиделают числовые сравнения. Вам нужно изменить все ==
на eq
.
Кроме того, это не делает то, что вы думаете:
if ($a == "add" || "add item") {
Я думаю, вы имели в виду:
if ($a eq "add" or $a eq "add item") {
Кроме того, $a
- это специальная переменная в Perl. Пожалуйста, не используйте его в общем коде. Имя переменной важно. Ваша переменная должна называться $action
.
Обновление: Стоит также указать, что если в вашем коде было use warnings
(и вы должны всегда включатьuse warnings
в вашем Perl-коде), тогда вы бы увидели предупреждения о том, что с вашим кодом возникла проблема.
$ perl -Mwarnings -e'$action = "x"; print "yes" if $action == "quit"'
Argument "quit" isn't numeric in numeric eq (==) at -e line 1.
Argument "x" isn't numeric in numeric eq (==) at -e line 1.