2012-12-20 44 views
9

是否可以將數組的引用賦值爲perl中散列表的key : value對中的值?散列值的數組perl

+2

看一看[數據結構菜譜](HTTP://perldoc.perl .ORG/perldsc.html#HASHES-OF-陣列)。 – mpe

回答

21

是的。用反斜槓創建對數組的引用:

$hash{key} = \@array; 

注意,這將鏈接到實際的數組,因此,如果您執行的變化,例如:

$array[0] = "foo"; 

這也將意味着$hash{key}[0]是設置爲"foo"

如果這不是你想要的,你可以通過使用匿名數組引用[ ... ]複製值:

$hash{key} = [ @array ]; 

而且,你不必去通過陣列,以做到這一點。你可以簡單地直接分配:

$hash{key} = [ qw(foo bar baz) ]; 

瞭解更多關於建立引用在perldoc perlref

+0

也許有一些關於自動版化的話?:)對初學者來說很好知道 – gaussblurinc

+0

@loldop好的,對於初學者來說,很多知識都是很好的知識,但是,在這裏我們不是在談論自動版化,只是簡單的標量值被分配。 – TLP

+0

我認爲你的意思是「eq'foo'」不是「=='foo'」 – mswanberg

0
use Data::Dumper; @name=('5/17', 
    '5/17','5/17','5/17','5/17','5/17','5/17','5/17'); @status_flags=('U 
    H L','U C','U H L','U C','U C','U H L','U C', 'U H L'); 
    @ip_address=('192.168.0.11','192.168.0.2','192.168.0.13','192.168.0.0','192.168.0.3','192.168.0.12','192.168.0.4','192.168.0.14'); @dp_id=('0','0','0','0','0','0','0','0'); 
    @ip_prefix_length=('32','32','32','24', '32', '32','32','32'); 

    for ($value=0;$value<=5;$value++) { 


    $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'name'=>"$name[$value]"}; 
      $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'dp-id'=>"$dp_id[$value]"}; 
      $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-address'=>"$ip_address[$value]"}; 
      $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-prefix-length'=>"$ip_prefix_length[$value]"}; 


    $keyvals{'Response'}{'brocade-extension-ip-route'}{'extension-ip-route'}={'ip-gateway'=>'*'}; 




    } 
     print Dumper \%keyvals; 

    Each array value assign into hash value. $var1= { 
       'Response' => { 
          'extension-ip-route' => { 
                'status-flags' => 'U H L ' 
                    , 
                'ip-gateway' => '*', 
                'name' => '0/2', 
                'ip-address' => '192.168.20.11', 
                'dp-id' => '0', 
                'ip-prefix-length'=>'32' 

                } 
          } 
      }; 
+0

你應該編輯你的答案,以便它的格式正確和可讀。 – AeroBuffalo