0

私は 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ハッシュを子として現在のスポットに挿入するには、その行が必要です。

どんな助けでも大歓迎です!

4

1 に答える 1

1
$key->{$_}->{'basicServiceUsedList'}[0]->{'chargeInformationList'}[0]

ここで作成されたハッシュへの参照が含まれています (以前ではない場合):

if ( not defined
   $key->{$_}{basicServiceUsedList}[0]
      ->{chargeInformationList}[0]
         ->{CallTypeGroup} )

どのデータ構造が必要かを示していないため、メッセージを説明する以外にどのように支援できるかわかりません. 単にそれを変更したいだけだと思いますif

if ( not defined
   $key->{$_}{basicServiceUsedList}[0]
      ->{chargeInformationList}[0] )

ところで、そのような長い「名前」を持つ代わりに、変数を使用して中間参照を保持する必要があります。

ところで、私はこれらすべてのハードコードされたゼロ インデックスに非常に懐疑的です。

于 2012-09-21T17:49:12.097 に答える