如何在Perl中创建动态数组?

时间:2014-12-05 01:02:00

标签: arrays perl loops dynamic-arrays

我已经在复杂的XML解析脚本中使用了两个数组。我使用这个访问两个数组:

my @packageNames = (\@listOfValuesRetail, \@listOfValuesAdvisor);

我稍后会循环读取值并执行操作。效果很好。

但是,我刚刚得到一个新的要求,即我使用的输出循环必须采用一个,另一个或两个数组。

由于上面的行是硬编码的,我认为最简单的方法是将我需要的数组只推送到一个新的数组@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);
        }

等。但是,当我这样做,并运行脚本时,我得到的所有输出都是10x结束,重复。

调用当前硬编码数组的循环如下所示:

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...
)

所以如果我拥有它们,循环已经会占用更多的数组,但是我仍然坚持硬编码它们因为我无法弄清楚如何将数组放入数组然后将其转换为数组使用这个简单的外观,没有它以某种方式多次给我数据,比如它读取数组的长度而不是内容或其他东西。不确定。

这看起来很简单......怎么做?

1 个答案:

答案 0 :(得分:2)

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

你所展示的内容中没有任何内容会导致“我的所有输出都像10x一样,重复”因此我怀疑你已将两个if语句放在循环中。另请注意,在for循环中,$x只会是0和1。

我认为你需要展示你的其他程序。