use warnings;
use strict;
my $number = 1;
my %hash =
(
key1 => $number,
key2 => 'something'
);
for (1 .. 10)
{
print $hash{key1}, "\n";
$number++;
}
每一步都会改变数字。预期结果为1, 2, 3, ..., 10
,但实际结果为1, 1, 1, ..., 1
。哈希为什么不改变??
答案 0 :(得分:4)
您将1
分配给变量$number
,然后将$number
的值分配给具有键key1
的哈希元素。然后在递增$number
变量的同时打印该元素十次。
您在"号码"中所做的更改变量不会影响哈希值,因为您已经分配了哈希值,之后只更改$number
的值
除非你像这样编写循环,并且每次更改时都将$number
的值复制到哈希
for ( 1 .. 10 ) {
$hash{key1} = $number;
print $hash{key1}, "\n";
++$number;
}
答案 1 :(得分:2)
哈希元素的值本身是标量变量
你所写的是这样的
use strict;
use warnings;
my $number = 1;
my $hash_key1 = $number;
my $hash_key2 = 'something';
for ( 1 .. 10 ) {
print $hash_key1, "\n";
++$number;
}
答案 2 :(得分:0)
您可以使用标量引用来指定哈希值。
use strict;
use warnings;
my $number = 1;
my $hash_key1 = \$number;
my $hash_key2 = 'something';
for ( 1 .. 10 ) {
print $$hash_key1 "\n";
++$number;
}
取消hash_key。