3

我知道我是 Perl 的新手,所以请原谅我的愚蠢错误。我正在制作一个接受用户输入的计算器,但它不起作用。在 if 语句之前它运行良好且花花公子,当它到达 if 语句时它只是结束程序。我浏览了论坛和书籍,但找不到任何东西。

use warnings;

print "number\n";
$number = <STDIN>;
# Asks the user for what number to calculate.

print "Second number\n";
$secnumber = <STDIN>;
# Asks the user for second number to calculate the first number with

print "Calculation\n Multiplication  x\n Addition  +\n Substraction  -\n ";
$calculation = <STDIN>;
# Asks the user for which calculation to make.

if ($calculation eq "x") {
    print "$number" . 'x' . "\n$secnumber" . '=' . "\n" . ($number * $secnumber);
} elsif ($calculation eq "+") {
    print "$number" . '+' . "\n$secnumber" . '=' . "\n" . ($number + $secnumber);
} elsif ($calculation eq "-") {
    print "$number" . '-' . "\n$secnumber" . '=' . "\n" . ($number - $secnumber);
}
# Displays the calculation and answer.
4

2 回答 2

3

分配给的值$calculation将包含一个换行符。因此,在 unix 类型系统上,分配给的值$calculation实际上是+\n

您需要使用 chomp 函数来删除换行符。您可以通过此 URL http://perldoc.perl.org/functions/chomp.html找到有关 chomp 的更多信息

您可以通过两种方式应用 chomp。您可以在阅读时让它换行

chomp ($calculation = <STDIN>);

或者您可以在分配后进行。

$calculation = <STDIN>;
chomp ($calculation);

同样作为 Perl 的新用户,我建议除了使用警告编译指示外,您还应该使用严格的编译指示来帮助您保持良好的可维护代码。

use warnings;
use strict;
于 2013-10-19T22:06:18.787 回答
2

您需要chomp($calculation)在 if stmt 之前和初始分配操作之后执行 a 。($calulation = <STDIN>;)。

于 2013-10-19T21:58:03.743 回答