2012-12-12 102 views
-2

我有幾個名稱不同的數組。以下是我的數組名稱。如何在perl中追加數字到數組名稱

@node_level1_1_1=read_array_level2(@node_level1_1); 
@node_level1_2_1=read_array_level2(@node_level1_2); 
... 
@node_level1_11_1=read_array_level2(@node_level1_11); 

我想解析來自@從數組node_level1_1_1到@ node_level1_11_1另一個子程序function.I試着寫這段代碼就沒有工作了。

for ($j=1; $j < 12; $j++) { 

    my $var= output_data_xml_nodes(4,@node_level1_$j_1); 

} 

當我運行代碼,它引發以下錯誤:發現

標,其中運營商預計將在./html_parser1.pl線153, 近 「@ node_level1_ $ j_1」(缺少操作前)語法錯誤 位於./html_parser1.pl行153,「@ node_level1_ $ j_1」附近執行 ./html_parser1.pl由於編譯錯誤而中止。

是否有任何增量數組。請讓我知道。

感謝, 阿南德

+0

首先:**使用更好的變量名稱**。其次,'read_array_level2()'做了什麼? – 2012-12-12 06:28:49

+1

因爲......你似乎試圖用另一個變量的內容修改一個變量名。 '@ node_level1_ $ j_1'?你不能那樣做。這就是爲什麼它告訴你這是一個語法錯誤。 –

+1

[重讀這個問題]哦,哦,上帝,不。廢棄你正在做的並使用更好的數據結構。想到數組引用的哈希值。 – 2012-12-12 06:30:15

回答

1

一種方法是使用散列:

use strict; 
use warnings; 

my @array_1 = (1, 11); 
my @array_2 = (2, 22); 
my %arrays = ( 
    array_1 => [ @array_1], 
    array_2 => [ @array_2] 
); 

for my $i (1, 2) { 
    print join(",", @{$arrays{"array_$i"}}), "\n"; 
} 

另一種方法是使用eval:

use strict; 
use warnings; 

my @array_1 = (1, 11); 
my @array_2 = (2, 22); 

for my $i (1, 2) { 
    my $array_ref = eval('\@'."array_$i"); 
    print join(",", @$array_ref), "\n";; 
} 
+0

謝謝@perreal我會嘗試執行代碼,並讓你的工作與否。 – user128956

3

我認爲你需要使用更復雜的數據結構。在創建變量名是合法的(no strict 'refs'; @{construct string here})它是邪惡的,錯誤的,難以維護等,而且只用全局變量*不寒而慄*工作

你的代碼的例子應該是什麼樣子:

my @new_node; 
$new_node[1][1][1] = read_array_level2($old_node[1][1]); 
$new_node[1][2][1] = read_array_level2($old_node[1][2]); 
...; 
$new_node[1][11][1] = read_array_level2($old_node[1][11]); 

或更好,使用循環

my @new_node; 
for my $i (1 .. 12) { 
    $new_node[1][$i][1] = read_array_level2($old_node[1][$i]) 
} 

但是,您將與數組引用,而不是數組,大部分的時間來處理。閱讀和重新閱讀

和朋友。