2014-12-05 141 views
0

我有两个数组已经工作到一个复杂的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... 
) 

所以循环已经将采取更多的阵列,如果我有他们,但我仍然停留硬编码他们,因为我无法弄清楚如何将数组放到数组中,然后让它在这种简单的外观下工作,而不需要多次给我多次数据,比如读取数组的长度而不是内容或其他东西。不确定。

这似乎很容易做...它是如何完成的?

+2

只要'@ packageNames'开始为空,那么如果'@ listOfValuesRetail'和'@ listOfValuesAdvisor'都是非空的,那么您的两次推送*完全等同于原始定义。没有任何东西显示会导致*“我的所有输出结果都像10倍以上,重复”*,所以我怀疑你已经把两个if语句放在一个循环中。还要注意,在你的'for'循环中,'$ x'只会是0和1.我认为你需要显示你的程序的其余部分。 – Borodin 2014-12-05 01:18:50

+0

哇。它不是出于循环,我认为它是。我读了你的陈述,并说,不,但我会检查。繁荣,在那里,是在读取XML并对其排序的循环中的“添加此数组”部分。非常感谢。惊人。已经在这几个小时了...这么简单。 – dbonneville 2014-12-05 01:25:06

+0

好吧,我很高兴它被分类。我已将其作为解决方案发布。 – Borodin 2014-12-05 01:28:16

回答

2

只要@packageNames开始为空,如果@listOfValuesRetail@listOfValuesAdvisor都不为空,那么您的两次推送与原始定义完全等效。

没有什么在你已经显示,将导致“我所有的输出像10倍以上,重复”所以我怀疑你已经把你的两个if陈述在循环内。还请注意,在您的for循环中,$x将只会是0和1.

我认为您需要显示您的程序的其余部分。