我有两个数组已经工作到一个复杂的XML解析脚本。我正在使用这个访问两个阵列:如何在Perl中创建一个动态数组数组?
my @packageNames = (\@listOfValuesRetail, \@listOfValuesAdvisor);
我有一个循环,读取值和做的东西。很棒。
但是,我刚刚得到了一个新的要求,即我正在使用的输出循环必须采用一个,另一个或两个数组。
由于上面的线是硬编码的,我想通了一件容易的事是只推阵列(S)我需要到一个新的数组,@packageNames和循环通过他们:
# add this array to the package name array
if (@listOfValuesRetail) {
push(@packageNames, \@listOfValuesRetail);
}
# add this array to the package name array
if (@listOfValuesAdvisor) {
push(@packageNames, \@listOfValuesAdvisor);
}
等。但是当我这样做,并运行脚本,我得到了所有我的输出像10倍以上,重复。
调用当前的硬编码阵列环路这样做是这样的:
my $length = scalar @packageNames;
for (my $x = 0; $x < $length; $x++) {
print "Processing package " . ($x+1) . "\n";
# make an easy to read variable for the current array iteration
my $currentPackage = $packageNames[$x];
...do stuff...
)
所以循环已经将采取更多的阵列,如果我有他们,但我仍然停留硬编码他们,因为我无法弄清楚如何将数组放到数组中,然后让它在这种简单的外观下工作,而不需要多次给我多次数据,比如读取数组的长度而不是内容或其他东西。不确定。
这似乎很容易做...它是如何完成的?
只要'@ packageNames'开始为空,那么如果'@ listOfValuesRetail'和'@ listOfValuesAdvisor'都是非空的,那么您的两次推送*完全等同于原始定义。没有任何东西显示会导致*“我的所有输出结果都像10倍以上,重复”*,所以我怀疑你已经把两个if语句放在一个循环中。还要注意,在你的'for'循环中,'$ x'只会是0和1.我认为你需要显示你的程序的其余部分。 – Borodin 2014-12-05 01:18:50
哇。它不是出于循环,我认为它是。我读了你的陈述,并说,不,但我会检查。繁荣,在那里,是在读取XML并对其排序的循环中的“添加此数组”部分。非常感谢。惊人。已经在这几个小时了...这么简单。 – dbonneville 2014-12-05 01:25:06
好吧,我很高兴它被分类。我已将其作为解决方案发布。 – Borodin 2014-12-05 01:28:16