如下所示,我有一个 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。