我有兩個數組已經工作到一個複雜的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