Roy*_*ell 5 arrays perl foreach reference
我真的很想弄明白这一点,但是我的脸因为不断撞到这堵砖墙而受到伤害.
我正在尝试加载9个文本文件,每个文件由7行7个字符的矩阵组成,每个7个字符由空格分隔,然后将每个引用的矩阵保存到数组中的元素.我正在阅读每个文件中,但是当我访问我的数组时,所有元素都是相同的.我一直在寻找解决方案,我的问题在任何地方都没有得到解答,或者(更有可能)我不理解答案.这是我的代码的问题部分:
my @boardarray = (1, 2, 3, 4, 5, 6, 7, 8, 9);
sub LoadBoards {
my (@board, $infile, @allboards);
my $i = 1;
@allboards = @boardarray;
foreach (@allboards) {
my $infile = "board" . $i . "\.brd";
open FILE, "< $infile" or die $!;
my $line = 0;
while (<FILE>) {
chomp $_;
my @chars = split (/ /,$_);
$board[$line] = [@chars];
$line++;
}
my $tempboard = \@board;
DisplayOneBoard($tempboard); print ("\n"); #Test A
$boardarray[$i-1] = \@board; #Problem line?
DisplayOneBoard($boardarray[$i-1]); print ("\n"); #Test B
DisplayOneBoard($boardarray[0]); print ("\n----\n"); #Test C
$i++;
}
}
Run Code Online (Sandbox Code Playgroud)
- 我已经尝试将变量作为@boardarray的元素进行分配而没有任何变化.
- 我在foreach循环中使用@boardarray并将其更改为复制的@allboards而没有任何改进.
我希望'测试A'和'测试B'线是相同的,并且'测试C'线保持我加载的第一个矩阵.但是,对于每次迭代,所有三个都是相同的.
(对于迭代1,它们都是矩阵1.对于迭代2,它们都是矩阵2,等等.)
最后,所有元素都是完全相同的矩阵(矩阵9).
任何援助将不胜感激.谢谢.
问题是你每次循环都会重复使用它 @board.当您将对该板的引用推送到时@boardarray,您@board每次都按下指向相同的引用.修复很简单,只需移动my @board到foreach循环内部; 这@board每次创造一个新的.
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |