我是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循环。有谁能告诉我为什么输出顺序颠倒了?非常感谢。
答案 0 :(得分:4)
问题不在你的增量中。问题在于哈希。在计算机内存中,哈希的存储顺序与您声明的顺序不同,例如
my @fruits = keys %fruit_color;
print @fruits;
如果您运行脚本多次并监视输出,它将提供不同的输出。
哈希和数组都相同但有一些区别,即设置键(在数组中我们称为索引,在哈希中我们称为键)。
无论您想要什么名称,都可以将其作为关键字并存储价值。但是数组只能通过索引值访问数据。
因此,在数组中排列项很重要,因为您通过其索引值进行访问。但是,由于您已设置密钥,因此无需将项目排列为哈希值。
答案 1 :(得分:0)
几乎每种编程语言都有一个类似的++
运算符(以及相应的--
运算符)。它被称为预增量和后增量。 ++$foo
的作用类似于{ $foo += 1; return $foo; }
,但++$foo
是更有趣的版本。它会立即递增$foo
,但会返回先前的值。这使得编写很多简单的数学运算要短得多,因为您可以指定是否要在修改之前或之后获取值。