Re-using a parser I have applied on PM several times now:
use strict; use warnings; use Data::Dumper; my %tcl; my $ptr; my $threshold = 3; sub store_word { my ( $level, $word ) = @_; $word =~ s/^\s+//g; $word =~ s/\s+$//g; return "" unless $word; if( $level <= $threshold ) { $tcl{$word} = {} if not defined $tcl{$word}; $ptr = $tcl{$word}; } else { my ( $call, $value ) = split / /, $word; $ptr->{ $call } = $value; } return ""; } while(my $input = <DATA>){ my $level = 0; my $word = ""; my %action = ( '{' => sub { $word = store_word( $level++, $word + ) }, '}' => sub { $word = store_word( $level--, $word + ) }, 'default' => sub { $word .= shift }, ); ( $action{$_} // $action{'default'} )->($_) for $input =~ /./g; } print Dumper(\%tcl); print $tcl{'Make Cal l'}{'CumulativeSuccessfullyEstablished(calls)(In) +'}, "\n"; __DATA__ {{Register {{CumulativeActive(calls)(In) 0} {CumulativeSuccessfullyEst +ablished(calls)(In) 0} {CumulativeSuccessfullyCompleted(calls)(In) 0} + {CumulativeUnsuccessful(calls)(In) 0} }}} {{{Make Cal l} {{Cumulativ +eActive(calls)(In) 0} {CumulativeSuccessfullyEstablished(calls)(In) 0 +} {CumulativeSuccessfullyCompleted(calls)(In) 0} {CumulativeUnsuccess +ful(calls)(In) 0} }}} {{Initiating {{CumulativeA ctive(calls)(In) 0} +{CumulativeSuccessfullyEstablished(calls)(In) 0} {CumulativeSuccessfu +llyCompleted(calls)(In) 0} {CumulativeUnsuccessful(calls)(In) 0} }}} +{{Summary {{CumulativeActive(calls)(In) 0} {CumulativeSuccessfullyEst +ablished(calls)(In) 0} {CumulativeSuccessfullyCompleted(calls)(In) 0} + {CumulativeUnsuccessful(calls)(In) 0} }}}
In reply to Re: Convert Tcl Keyed List to Perl
by hdb
in thread Convert Tcl Keyed List to Perl
by bkobs39
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |