Perl记录的值不一致

时间:2015-04-13 22:36:01

标签: arrays perl

我制作了一个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;来分配整个数组但是在这里,它似乎是不同的和不正确的。

你知道错误在哪里吗?

1 个答案:

答案 0 :(得分:3)

我猜你的数组@filelist是在循环之外声明的,所以你将同一数组的引用放到数据结构的多个位置。

你可以在循环中移动声明,这样你每次都可以选择一个新的数组,你可以在设置数据元素时数组复制到一个匿名数组中,就像此

$directory[$idxrep]{"listoffiles"} = [ @filelist ];

请注意,无需跟踪$idxrep,因为您每次只需push新的哈希值,就像这样

my %dir = (
  size          => $repsize,
  numberoffiles => scalar @filelist,
  listoffiles   => [ @filelist ],
);
push @directory, \%dir;

但请注意,必须再次在循环中声明%dir