' ++'的行为perl中的运算符

时间:2017-08-07 10:04:29

标签: perl operator-keyword

我是perl的新手。我无法理解以下代码的输出。

THREE.Plane()

输出粘贴在这里:

my %fruit_color = (apple => "red", banana => "yellow", grape => "purple");

my @fruits = keys %fruit_color;
my @colors = values %fruit_color;

print "The color of apple is ", $fruit_color{"apple"}, "\n";

$cnt = 0;
while ($cnt < @fruits) {
    print $fruits[$cnt ++], " ";
}
print "\n";
$cnt = 0;
while ($cnt < @colors) {
    print $colors[$cnt ++], " ";
}

但是,如果我改变了我的代码:

The color of apple is red
grape banana apple
purple yellow red

输出将是:

my %fruit_color = (apple => "red", banana => "yellow", grape => "purple");

my @fruits = keys %fruit_color;
my @colors = values %fruit_color;

print "The color of apple is ", $fruit_color{"apple"}, "\n";

$cnt = 0;
while ($cnt < @fruits) {
    print $fruits[$cnt], " "; # DIFF HERE !
    $cnt ++;
}
print "\n";
$cnt = 0;
while ($cnt < @colors) {
    print $colors[$cnt ++], " ";
}

我无法理解这些示例之间的区别,特别是为什么第一个while循环的更改会影响第二个while循环。有谁能告诉我为什么输出顺序颠倒了?非常感谢。

2 个答案:

答案 0 :(得分:4)

问题不在你的增量中。问题在于哈希。在计算机内存中,哈希的存储顺序与您声明的顺序不同,例如

my @fruits = keys %fruit_color;
print @fruits;

如果您运行脚本多次并监视输出,它将提供不同的输出。

哈希和数组都相同但有一些区别,即设置键(在数组中我们称为索引,在哈希中我们称为键)。

无论您想要什么名称,都可以将其作为关键字并存储价值。但是数组只能通过索引值访问数据。

因此,在数组中排列项很重要,因为您通过其索引值进行访问。但是,由于您已设置密钥,因此无需将项目排列为哈希值。

了解更多infoperldoc

答案 1 :(得分:0)

几乎每种编程语言都有一个类似的++运算符(以及相应的--运算符)。它被称为预增量和后增量。 ++$foo的作用类似于{ $foo += 1; return $foo; },但++$foo是更有趣的版本。它会立即递增$foo,但会返回先前的值。这使得编写很多简单的数学运算要短得多,因为您可以指定是否要在修改之前或之后获取值。