在Perl中将哈希推送到现有哈希
我是Perl新手,所以您必须原谅我的代码 我正在读取一个树结构的文件(比如xml,只是不是实际的),我想通过树在Perl中将哈希推送到现有哈希,perl,hash,push,Perl,Hash,Push,我是Perl新手,所以您必须原谅我的代码 我正在读取一个树结构的文件(比如xml,只是不是实际的),我想通过树foreach,如果某个“节点”没有子节点,我想插入它。很简单 这是我的密码: foreach $key ( @{$struct->{'transferBatch'}->{'callEventDetails'} } ) { foreach ( keys %{$key} ) { if ( $_ eq "mobileTerminatedCall" )
foreach
,如果某个“节点”没有子节点,我想插入它。很简单
这是我的密码:
foreach $key ( @{$struct->{'transferBatch'}->{'callEventDetails'} } ) {
foreach ( keys %{$key} ) {
if ( $_ eq "mobileTerminatedCall" ) {
if ( defined $key->{$_}->{'basicServiceUsedList'} ) {
if ( defined $key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'} ) {
if ( not defined $key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]->{'CallTypeGroup'} ) {
$CallTypeGroup = {
"CallTypeLevel1:" => "0",
"CallTypeLevel2:" => "0",
"CallTypeLevel3:" => "0"
};
#Doesn't work!
$key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]{'CallTypeGroup'} = $CallTypeGroup;
}
}
}
}
}
}
迭代工作正常,但我的push
调用失败,表示它不是数组引用。我觉得我很接近了,但我需要那一行将$CallTypeGroup
哈希作为子项插入到当前位置
感谢您的帮助
$key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]
包含对在此创建的哈希的引用(如果不是更早的话):
你没有指出你想要什么样的数据结构,所以我不确定我们除了解释信息之外还能提供什么帮助。我想您只是想将if
更改为
if ( not defined
$key->{$_}{basicServiceUsedList}[0]
->{chargeInformationList}[0] )
顺便说一句,您真的应该使用变量来保存中间引用,而不是使用这么长的“名称”
顺便说一句,我非常怀疑所有那些硬编码的零索引。使用引用将复杂的数据结构存储为标量。if语句按预期工作,这意味着如果“CallTypeGroup”未定义为子级,我需要添加它。在我循环之前,零一直是占位符,到现在为止,我只是想得到一个工作原型。我没有说它没有。我说我不知道你是否不告诉我们你想要什么数据结构。
$key->{$}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]
是一个散列,所以我想添加CallTypeGroup
,这也是一个作为子级的散列。@OnResolve,push
添加到数组中。可能->{CallTypeGroup}
在推送中丢失了->{CallTypeGroup}
?doh!好的,这验证了我收到的错误消息:-P。因此,我更新了我的问题,以反映添加到散列,但尽管我没有收到错误消息,散列似乎保持不变。
if ( not defined
$key->{$_}{basicServiceUsedList}[0]
->{chargeInformationList}[0] )