2012-12-20 2 views
9

Ist es möglich, die Referenz eines Arrays als Wert im key : value Paar einer Hash-Tabelle in Perl zuzuweisen?Array im Wert von Hash-Perl

+2

Werfen Sie einen Blick auf die [Datenstrukturen Kochbuch] (http: //perldoc.perl .org/perldsc.html # HASHES-OF-ARRAYS). – mpe

Antwort

21

Ja ist es. Erstellen Sie einen Verweis auf das Array unter Verwendung Backslash:

$hash{key} = \@array; 

Beachten Sie, dass dies dem tatsächlichen Array verbinden wird, so dass, wenn Sie eine Änderung durchführen wie:

$array[0] = "foo"; 

Das bedeutet auch, dass $hash{key}[0] ist auf "foo" eingestellt.

Wenn das nicht das, was Sie wollen, können Sie die Werte kopieren, indem Sie eine anonyme Array-Referenz mit [ ... ]:

$hash{key} = [ @array ]; 

Darüber hinaus müssen Sie sich nicht, um durch das Feld gehen, dies zu tun. Sie können einfach direkt zuordnen:

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

Lesen Sie mehr über die Herstellung Referenzen in perldoc perlref

+0

vielleicht ein paar Worte zur Autovivifikation? :) es ist gut zu wissen für Anfänger – gaussblurinc

+0

@loldop Nun, ja, viele Dinge sind gut für Anfänger, aber hier sprechen wir nicht über Autovivification, nur einfache skalare Werte zugewiesen werden. – TLP

+0

Ich denke, du meintest "eq 'foo'" nicht "== 'foo'" – mswanberg

9

Ja. Siehe http://perlmonks.org/?node=References+quick+reference für einige Grundregeln für solche Datenstrukturen zugreifen, sondern um es zu schaffen, nur einer von ihnen tun:

%hash = ('somekey' => \@arrayvalue); 
$hash{'somekey'} = \@arrayvalue; 
%hash = ('somekey' => [ ... ]); 
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

Du solltest deine Antwort so bearbeiten, dass sie richtig formatiert und lesbar ist. – AeroBuffalo