我是Perl的新手,所以你必须原谅我的代码。
我正在读一个树形结构的文件(比如xml,实际上并不是这样),我希望通过树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
调用失败,说它不是ARRAY引用。我觉得我很接近,但我需要该行将$CallTypeGroup
哈希作为孩子插入到当前位置。
感谢任何帮助!
答案 0 :(得分:1)
$key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]
包含对哈希的引用,如此处创建的(如果不是更早):
if ( not defined
$key->{$_}{basicServiceUsedList}[0]
->{chargeInformationList}[0]
->{CallTypeGroup} )
您没有说明您想要的数据结构,所以我不确定除了解释消息之外我们可以提供哪些帮助。我认为您只想将if
更改为
if ( not defined
$key->{$_}{basicServiceUsedList}[0]
->{chargeInformationList}[0] )