是否可以在if语句中将变量设置为彼此相等?

时间:2019-04-08 01:29:25

标签: perl

我正在做一项家庭作业,该任务使我可以执行四个用户输入的数字并将其进行比较以输出最大和最小的数字的任务。我不能使用循环,所以我使用了if / else / elsif语句,但是我一直遇到错误。到目前为止,我已经知道了,但是我不确定自己做错了什么。

[Shebang]

my $small;
my $big;

print "\nEnter first number: ";
chomp (my $one = <>);

print "\nEnter second number: ";
chomp (my $two = <>);

print "\nEnter third number: ";
chomp (my $three = <>);

print "\nEnter fourth number: ";
chomp (my $four = <>);

if ($one >= $two) {
    $one = $big;
    $two = $small;
}
else {
    $one = $small;
    $two = $big;
}

if ($three >= $big) {
    $three = $big;
}
elsif ($three <= $small) {
    $three = $small;
}

if ($four >= $big) {
    $four = $big;
}
elsif ($four <= $small) {
    $four = $small;
}

print "LRG: $big\n";
print "SML: $small\n";

理想情况下,键入四个数字,它将输出最大和最小的数字。相反,我得到 “在[文件名] .pl第29行,<>第4行的数字ge(> =)中使用未初始化的值$ big。”在第29和36行。 我也得到 “在串联(。)或字符串第44行,<>第4行中使用初始化值$ small。”

1 个答案:

答案 0 :(得分:2)

Perl的工作方式与几乎所有其他编程语言相同。在赋值语句中,将运算符右侧的值分配给运算符左侧的变量。因此,在如下语句中:

$one = $big;

您将$big的值分配给变量$one。正如评论中已经指出的那样,这是错误的方法,您确实想要:

$big = $one;

您可以采用几种简单的方法。首先,您可以对数字列表进行排序,然后从列表中获取第一个和最后一个元素:

my @sorted = sort { $a <=> $b } ($one, $two, $three, $four);
my ($small, $big) = @sorted[0, $#sorted];

或者您可以使用模块List::Util中的min()max()函数。

use List::Util qw[min max];

my $small = min($one, $two, $three, $four);
my $big   = max($one, $two, $three, $four);