我有一个perl脚本,我们将哈希转换为数组 -
my %info = (
'name' => $1,
'ip' => $2,
'parent' => '',
'isLocal' => 0,
'clip' => 0,
);
my @siteinfos = ();
push( @siteinfos, \%info );
Run Code Online (Sandbox Code Playgroud)
现在我可以通过以下方式访问阵列:
foreach my $site(@siteinfos) {
if ( $site->{'name'} eq $sitename) {
.....
}
Run Code Online (Sandbox Code Playgroud)
首先,我不确定这种转换是如何工作的.其次,现在我想以(key,pair)格式向这个数组中添加更多元素.我该怎么做?
首先,没有转换.
my @siteinfos = ();
Run Code Online (Sandbox Code Playgroud)
定义一个数组@siteinfos并设置为空列表.当然,你可以通过使用just获得相同的结果
my @siteinfos;
Run Code Online (Sandbox Code Playgroud)
接下来,声明
push( @siteinfos, \%info );
Run Code Online (Sandbox Code Playgroud)
推送到散列的引用%info来@siteinfos作为阵列的鞋底元件.
接下来,循环
foreach my $sinfo (@siteinfos) { # assuming original is a typo
Run Code Online (Sandbox Code Playgroud)
最终别名$sinfo到该唯一的哈希引用@siteinfos.在循环体中,您可以通过推送的引用访问原始哈希的元素@siteinfos.
现在,如果你做了以下事情会有所不同:
push @siteinfos, %info;
Run Code Online (Sandbox Code Playgroud)
那将设置@siteinfos为如下列表(顺序是非确定性的):
$VAR1 = [
'ip',
undef,
'clip',
0,
'isLocal',
0,
'name',
undef,
'parent',
''
];
Run Code Online (Sandbox Code Playgroud)
这undef是因为我运行脚本时匹配变量是空的.现在,如果你想将另一个键值对推送到这个数组,这是微不足道的:
push @siteinfos, $key, $value;
Run Code Online (Sandbox Code Playgroud)
但是,当然,通过将哈希值分配给数组,您将无法简单地按键查找值.此外,您可以继续将重复键推送到数组,但如果将其分配回另一个哈希:
my %otherinfo = @siteinfos;
Run Code Online (Sandbox Code Playgroud)
那么只有偶数索引元素(键)的最后一个版本及其相应的奇数索引元素(值)才能存活.
你没有转换任何东西.您正在创建一个名为的新数组@siteinfos.
my @siteinfos = ();
Run Code Online (Sandbox Code Playgroud)
然后添加一个条目,这是对哈希的引用%info.
push( @siteinfos, \%info );
Run Code Online (Sandbox Code Playgroud)
该数组现在持有一个引用%info.那是$siteinfo[0].
在循环中,迭代所有元素@siteinfos.hashref现在进入$sinfo.
如果要为该hashref添加更多键和值,只需将它们放入.
foreach my $sinfo (@siteinfos) {
if ( $sinfo->{'name'} eq $sitename) {
$sinfo->{foo} = "bar"; # as simple as this
}
}
Run Code Online (Sandbox Code Playgroud)