#!/usr/bin/perl -- use strict; use warnings; my $root_stack = []; my $curr_stack = $root_stack; my @prev_stack; my $data = ""; while(){ $data .= $_; next if /^\s*$/; chomp; s/^\s+//; if(/^\s*{\s*$/){ # push @$curr_stack, $_; push @$curr_stack, '{'; push @$curr_stack,[]; push @prev_stack, $curr_stack; $curr_stack = $curr_stack->[-1]; } elsif( /^\s*}\s*$/ ){ $curr_stack = pop @prev_stack; # push @$curr_stack, $_; push @$curr_stack, '}'; } else { if( /:/ ){ if( /^\s*(.+?)(\s\:\s)(.+?)\s*$/ ){ push @$curr_stack, [ $1, $2, $3 ]; } else { push @$curr_stack, [ split /(:)/, $_ ]; } } else { push @$curr_stack, $_; } } # warn "$_\n", Dump($root_stack)," "; # debug } use DDS; print Dump($root_stack); __DATA__ CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord { sCFChargingOutput { callIdentificationNumber : '6CBFD7'H exchangeIdentity : "DWLCCN6" gSMCallReferenceNumber : '9103770001'H switchIdentity : '0001'H recordSequenceNumber : '39D42E'H date : '1409071F'H } eventModule { iNServiceDataEventModule { chargePartySingle : 'aPartyToBeCharged (0)' genericChargingDigits { [0] : '2000'H [1] : '011351'H [2] : '223A941400'H [3] : '233A940209'H [4] : '043A2000'H [5] : '0542'H [6] : '2600'H [7] : '2700'H [8] : '080290701391620122'H [9] : '2A02'H [10] : '72000000000000000000000000'H [11] : '730000000000000000041F'H [12] : '7400000000'H [13] : '3502'H } genericChargingNumbers { [0] : '0003136985138324'H [1] : '010413198935930920'H [2] : '0203136985138324'H [3] : '038290905893701402'H [4] : '0B000002000000'H } serviceFeatureCode : '0002'H timeForEvent : '131A01'H } } } CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord { sCFChargingOutput { callIdentificationNumber : '6CC99C'H exchangeIdentity : "DWLCCN6" switchIdentity : '0001'H recordSequenceNumber : '39D42F'H date : '1409071F'H } eventModule { iNServiceDataEventModule { chargePartySingle : 'bPartyToBeCharged (1)' genericChargingDigits { [0] : '2002'H [1] : '010359'H [2] : '023A8207'H [3] : '033A8207'H [4] : '043A0000'H [5] : '0506'H [6] : '2600'H [7] : '2704'H [8] : '080290701391622322'H [9] : '2A02'H [10] : '72000000000000000000000000'H [11] : '730000000000000000001F'H [12] : '3500'H } genericChargingNumbers { [0] : '0003138935167173'H [1] : '028210850000'H [2] : '0303138935167173'H [3] : '06041319'H } serviceFeatureCode : '0002'H timeForEvent : '131A20'H } } } #### $ARRAY1 = [ 'CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord', '{', [ 'sCFChargingOutput', '{', [ [ 'callIdentificationNumber', ' : ', '\'6CBFD7\'H' ], [ 'exchangeIdentity', ' : ', '"DWLCCN6"' ], [ 'gSMCallReferenceNumber', ' : ', '\'9103770001\'H' ], [ 'switchIdentity', ' : ', '\'0001\'H' ], [ 'recordSequenceNumber', ' : ', '\'39D42E\'H' ], [ 'date', ' : ', '\'1409071F\'H' ] ], '}', 'eventModule', '{', [ 'iNServiceDataEventModule', '{', [ [ 'chargePartySingle', ' : ', '\'aPartyToBeCharged (0)\'' ], 'genericChargingDigits', '{', [ [ '[0]', ' : ', '\'2000\'H' ], [ '[1]', ' : ', '\'011351\'H' ], [ '[2]', ' : ', '\'223A941400\'H' ], [ '[3]', ' : ', '\'233A940209\'H' ], [ '[4]', ' : ', '\'043A2000\'H' ], [ '[5]', ' : ', '\'0542\'H' ], [ '[6]', ' : ', '\'2600\'H' ], [ '[7]', ' : ', '\'2700\'H' ], [ '[8]', ' : ', '\'080290701391620122\'H' ], [ '[9]', ' : ', '\'2A02\'H' ], [ '[10]', ' : ', '\'72000000000000000000000000\'H' ], [ '[11]', ' : ', '\'730000000000000000041F\'H' ], [ '[12]', ' : ', '\'7400000000\'H' ], [ '[13]', ' : ', '\'3502\'H' ] ], '}', 'genericChargingNumbers', '{', [ [ '[0]', ' : ', '\'0003136985138324\'H' ], [ '[1]', ' : ', '\'010413198935930920\'H' ], [ '[2]', ' : ', '\'0203136985138324\'H' ], [ '[3]', ' : ', '\'038290905893701402\'H' ], [ '[4]', ' : ', '\'0B000002000000\'H' ] ], '}', [ 'serviceFeatureCode', ' : ', '\'0002\'H' ], [ 'timeForEvent', ' : ', '\'131A01\'H' ] ], '}' ], '}' ], '}', 'CME20CP6.CallDataRecord.uMTSGSMPLMNCallDataRecord', '{', [ 'sCFChargingOutput', '{', [ [ 'callIdentificationNumber', ' : ', '\'6CC99C\'H' ], [ 'exchangeIdentity', ' : ', '"DWLCCN6"' ], [ 'switchIdentity', ' : ', '\'0001\'H' ], [ 'recordSequenceNumber', ' : ', '\'39D42F\'H' ], [ 'date', ' : ', '\'1409071F\'H' ] ], '}', 'eventModule', '{', [ 'iNServiceDataEventModule', '{', [ [ 'chargePartySingle', ' : ', '\'bPartyToBeCharged (1)\'' ], 'genericChargingDigits', '{', [ [ '[0]', ' : ', '\'2002\'H' ], [ '[1]', ' : ', '\'010359\'H' ], [ '[2]', ' : ', '\'023A8207\'H' ], [ '[3]', ' : ', '\'033A8207\'H' ], [ '[4]', ' : ', '\'043A0000\'H' ], [ '[5]', ' : ', '\'0506\'H' ], [ '[6]', ' : ', '\'2600\'H' ], [ '[7]', ' : ', '\'2704\'H' ], [ '[8]', ' : ', '\'080290701391622322\'H' ], [ '[9]', ' : ', '\'2A02\'H' ], [ '[10]', ' : ', '\'72000000000000000000000000\'H' ], [ '[11]', ' : ', '\'730000000000000000001F\'H' ], [ '[12]', ' : ', '\'3500\'H' ] ], '}', 'genericChargingNumbers', '{', [ [ '[0]', ' : ', '\'0003138935167173\'H' ], [ '[1]', ' : ', '\'028210850000\'H' ], [ '[2]', ' : ', '\'0303138935167173\'H' ], [ '[3]', ' : ', '\'06041319\'H' ] ], '}', [ 'serviceFeatureCode', ' : ', '\'0002\'H' ], [ 'timeForEvent', ' : ', '\'131A20\'H' ] ], '}' ], '}' ], '}' ];