Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中将哈希推送到现有哈希_Perl_Hash_Push - Fatal编程技术网

在Perl中将哈希推送到现有哈希

在Perl中将哈希推送到现有哈希,perl,hash,push,Perl,Hash,Push,我是Perl新手,所以您必须原谅我的代码 我正在读取一个树结构的文件(比如xml,只是不是实际的),我想通过树foreach,如果某个“节点”没有子节点,我想插入它。很简单 这是我的密码: foreach $key ( @{$struct->{'transferBatch'}->{'callEventDetails'} } ) { foreach ( keys %{$key} ) { if ( $_ eq "mobileTerminatedCall" )

我是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
调用失败,表示它不是数组引用。我觉得我很接近了,但我需要那一行将
$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] )