2011-09-22 18 views
4

對不起,這個語法問題。我找不到解決方案。 我想在perl中有一個哈希數組,每個數組都有字符串和數組。 我試着寫了下面的代碼:如何在perl中使用list的散列表

use strict; 
my @arr = (
     { name => "aaa" , values => ("a1","a2") }, 
     { name => "bbb" , values => ("b1","b2","b3") } 
    ); 


foreach $a (@arr) { 
    my @cur_values = @{$a->{values}}; 
    print("values of $a->{name} = @cur_values\n"); 
}; 

但是,這並不爲我工作。我得到編譯錯誤和警告(使用perl -w)

a.pl第2行中匿名散列元素的奇數個數。 無法使用字符串(「a1」)作爲ARRAY引用,而「strict refs」在a.pl線9

+2

http://perldoc.perl.org/perldsc.html時使用方括號是這種類型的事情很好的參考。 – Mat

+3

儘量避免使用'$ a'(和'$ b')作爲變量名 - 這些是爲'sort'保留的特殊情況... – plusplus

+1

您應該在開發Perl代碼時始終啓用警告。它會指出哪裏出現問題...... – tadmc

回答

6

嘗試以下操作:

use strict; 
my @arr = (
     { name => "aaa" , values => ["a1","a2"] }, 
     { name => "bbb" , values => ["b1","b2","b3"] } 
    ); 


foreach $a (@arr) { 
    my @cur_values = @{$a->{values}}; 
    print("values of $a->{name}: "); 
    foreach $b (@cur_values){ 
     print $b . ", " 
    } 
    print "\n"; 
}; 

你只需要定義你的上線3陣列和4

+2

你應該真的使用詞法循環變量(而不是使用'$ a',它具有不可思議的屬性。) – friedo

8

使用我想有hashs的數組在Perl

你不能。數組只包含Perl中的標量。但是,{}將創建一個hashref,它是一個標量,並且很好。

但這:

{ name => "aaa" , values => ("a1","a2") } 

手段一樣:

{ name => "aaa" , values => "a1", "a2" }, 

你想要一個數組引用(這是一個標量),而不是爲值列表。

{ name => "aaa" , values => ["a1","a2"] } 
2
my @arr = (
      { name => "aaa" , values => ["a1","a2"]  }, 
      { name => "bbb" , values => ["b1","b2","b3"] } 
     ); 

列表(與()製造)將得到壓扁。 Arrayrefs([])不會。

請參閱perldoc perlreftut瞭解更多信息。

此外,避免使用$a$b作爲變量名稱,因爲它們旨在用於sort塊內的特殊用途。