小编Vis*_*333的帖子

如何在 Perl 中正确替换哈希数组中的值?

如下所示,我有一个 foreach 循环,其中哈希数组中的值被另一个哈希数组中的值替换。

第二个 foreach 循环只是打印并测试值是否被正确分配。

foreach my $row (0 .. $#row_buff) {
    $row_buff[$row]{'offset'} = $vars[$row]{'expression'};
    print $row_buff[$row]{'offset'},"\n";
}

foreach (0 .. $#row_buff) {
    print $row_buff[$_]{'offset'},"\n";
}
Run Code Online (Sandbox Code Playgroud)

这里@row_buff和@vars是两个哈希数组。它们预先填充了所有使用的键的值。

哈希值被推入数组,如下所示:

推@row_buff,\%散列;

问题:假设第一个 foreach 打印中的打印语句如下:

string_a
string_b
string_c
string_d
Run Code Online (Sandbox Code Playgroud)

然后第二个 foreach 循环中的打印语句如下所示:

string_d
string_d
string_d
string_d
Run Code Online (Sandbox Code Playgroud)

这就是让我困惑的地方。两个打印语句应该以完全相同的方式打印,对吗?但是第二个打印语句打印的值只是重复方式的最后一个值。有人可以指出我这里可能出了什么问题吗?任何提示都将不胜感激。这是我第一次提出问题,如果我遗漏了什么,请原谅我。

更新

我可以添加一些信息,对此大家表示歉意。在 foreach 之前还有一行,如下所示:

@row_buff = (@row_buff) x $itercnt;
foreach my $row (0 .. $#row_buff) {
    $row_buff[$row]{'offset'} = $vars[$row]{'expression'};
    print $row_buff[$row]{'offset'},"\n";
}

foreach (0 .. $#row_buff) {
    print $row_buff[$_]{'offset'},"\n";
}
Run Code Online (Sandbox Code Playgroud)

$itercnt 是一个整数。我用它多次复制@row_buff。

arrays perl hash

2
推荐指数
1
解决办法
413
查看次数

标签 统计

arrays ×1

hash ×1

perl ×1