2014-12-05 106 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.

我認爲您需要顯示您的程序的其餘部分。