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
Antwort
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
vielleicht ein paar Worte zur Autovivifikation? :) es ist gut zu wissen für Anfänger – gaussblurinc
@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
Ich denke, du meintest "eq 'foo'" nicht "== 'foo'" – mswanberg
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' => [ ... ]);
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'
}
}
};
Du solltest deine Antwort so bearbeiten, dass sie richtig formatiert und lesbar ist. – AeroBuffalo
Werfen Sie einen Blick auf die [Datenstrukturen Kochbuch] (http: //perldoc.perl .org/perldsc.html # HASHES-OF-ARRAYS). – mpe