我制作了一个Perl脚本来处理结构化数据。通过递增$idxrep
(@filelist
在每个循环中不同),在循环中创建这样的数组元素:
$directory[$idxrep]{"size"}=$repsize;
$directory[$idxrep]{"numberoffiles"}=@filelist;
$directory[$idxrep]{"listoffiles"}=\@filelist;
当我用:
检查数组的内容时print (Dumper $directory[2]{"size"});
print (Dumper $directory[2]{"numberoffiles"});
print (Dumper $directory[2]{"listoffiles"});
print (Dumper $directory[5]{"size"});
print (Dumper $directory[5]{"numberoffiles"});
print (Dumper $directory[5]{"listoffiles"});
...
我有正确的尺寸,正确的文件数量但不正确的文件列表(包含在{"listoffiles"}
中),而它基于相同的数组@filelist
我已经使用$DataList[3]=\@filelist;
来分配整个数组但是在这里,它似乎是不同的和不正确的。
你知道错误在哪里吗?
答案 0 :(得分:3)
我猜你的数组@filelist
是在循环之外声明的,所以你将同一数组的引用放到数据结构的多个位置。
你可以在循环中移动声明,这样你每次都可以选择一个新的数组,你可以在设置数据元素时将数组复制到一个匿名数组中,就像此
$directory[$idxrep]{"listoffiles"} = [ @filelist ];
请注意,无需跟踪$idxrep
,因为您每次只需push
新的哈希值,就像这样
my %dir = (
size => $repsize,
numberoffiles => scalar @filelist,
listoffiles => [ @filelist ],
);
push @directory, \%dir;
但请注意,必须再次在循环中声明%dir