哈希没有改变价值

时间:2017-05-27 11:14:39

标签: perl hash

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。哈希为什么不改变??

3 个答案:

答案 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。