为什么这个检查 if 子句的 perl 代码总是默认为第一个 if


for ( ;; ) {
    print "Command>  ";
    $result = <STDIN>;
    print "n";
    $answer = 0;
    if ( $result == "add" ) {
        for ( $counter = 1; $counter >= 1; $counter++ ) {
            print "Enter the $counter th number:  ";
            $NumberToAdd = <STDIN>;
            if ( $NumberToAdd != "NONE" ) {
                $answer = $answer + $NumberToAdd;
            } else {
                print "n";
                last;
            }
        }
    } elsif ( $result == "subtract" ) {
        for ( $counter = 1; $counter >= 1; $counter++ ) {
            print "Enter the $counter th number:  ";
            $NumberToSub = <STDIN>;
            if ( $NumberToSub != "NONE" ) {
                $answer = $answer - $NumberToSub;
            } else {
                print "n";
                last;
            }
        }
    } elsif ( $result == "quit" ) {
        last;
    } else {
        print "Error. Please enter add, subtract, or quit, and press Enter. n";
    }
    print "The answer to your operation was: $answer n";
}

现在,如果您在终端行输入退出,它仍将进入第一个 if 语句。 或者,如果您输入 asdfsa,它仍将进入第一个 if 语句。 等。

编辑:新的,正确的工作代码如下所示:

for ( ;; ) {
    print "Command>  ";
    chomp( $result = <STDIN> );
    $answer = 0;
    if ( $result eq 'add' ) {
        for ( $counter = 1; $counter >= 1; $counter++ ) {
            print "Enter number $counter to add:  ";
            chomp( $NumberToAdd = <STDIN> );
            if ( $NumberToAdd ne 'NONE' ) {
                $answer = $answer + $NumberToAdd;
            } else {
                last;
            }
        }
    } elsif ( $result eq 'subtract' ) {
        for ( $counter = 1; $counter >= 1; $counter++ ) {
            if ( $counter == 1 ) {
                print "Enter the first number to begin subtracting from:  ";
                chomp( $NumberToSubtractFrom = <STDIN> );
                if ( $NumberToSubtractFrom eq 'NONE' ) {
                    last;
                }
            } elsif ( $counter != 1 ) {
                $countertodisplay = $counter - 1;
                print "Enter number $countertodisplay to subtract:  ";
                chomp( $NumberToSub = <STDIN> );
                if ( $NumberToSub eq 'NONE' ) {
                    last;
                } else {
                    $NumberToSubtractFrom = $NumberToSubtractFrom - $NumberToSub;
                }
            }
        }
        $answer = $NumberToSubtractFrom;
    } elsif ( $result eq 'quit' ) {
        last;
    } else {
        print "Error. Please enter add, subtract, or quit, and press Enter. n";
    }
    print "The answer to your operation was: $answer n";
}

错误的运算符用作 ..

..Perl 有一些运算符的两个版本,一个用于数字,一个用于字符串比较。例如$a == $b比较两个相等的数字,$a eq $b比较两个字符串。

有关详细信息,请参阅相等运算符;请注意数字字符串的单词。这些值在数值上相等,即使它们是不同的字符串并且字符串不同。

以下是快速摘录:

如果左参数在数值上等于右参数,则二进制"=="返回 true。

如果左参数的字符串等于右参数,则二进制"eq"返回 true。

第一步是用 eq 替换所有不正确的==用法。

此外,代码应从$result中删除尾随换行符,因为"foo" eq "foon"为 false。请参阅chomp了解如何轻松完成此操作。

最新更新