Here is my version , same distillation as this one

#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; use 5.010; #~ use v5.10.0; my $raw = "\nbob { \n ed { \n larry { \n rule5 +{ \n option { \n disable-server-r +esponse-inspection no; \n } \n tag [ +some_tag ]; \n from [ prod-L3 ]; \n t +o [ corp-L3 ]; \n source [ any ]; \n +destination [ any ]; \n source-user [ any ]; \n + category [ any ]; \n application [ any ]; + \n service [ any ]; \n hip-profiles [ + any ]; \n log-start no; \n log-end y +es; \n negate-source no; \n negate-de +stination no; \n action allow; \n log +-setting orion_log; \n }\n rule6 { \n + option { \n disable-server-response-inspe +ction no; \n } \n tag [ some_tag ]; +\n from [ prod-L3 ]; \n to [ corp-L3 ] +; \n source [ any ]; \n destination [ + any ]; \n source-user [ any ]; \n ca +tegory [ any ]; \n application [ any ]; \n + service [ any ]; \n hip-profiles [ any ]; \n + log-start no; \n log-end yes; \n + negate-source no; \n negate-destination no; + \n action allow; \n log-setting orio +n_log; \n } \n }\n }\n}\n"; ;;;;;;;;; my $FROM_CONFIG = do { use Regexp::Grammars 1.038; qr{ <nocontext: > # Switch off context substring retention aka $MATCH{""} <Objects> <rule: Objects> <[Object]> (?{ #~ ::dd( -Objects => \%MATCH ); $MATCH = $MATCH{Object}; }) <rule: Object> <Name=Key> \{ <[Value]>* \} (?{ #~ ::dd( -Object => \%MATCH ); $MATCH = { $MATCH{Name} => { map { %$_ } @{$MATCH{Valu +e}} } }; }) <rule: Value> <MATCH=Object> | <MATCH=KeyVal> <token: Key> [\w\-]+ <token: Val> [^\r\n\{;]+ <token: KeyVal> ^ \s* <Key> \s+ <Val> ; \s*? [\r\n]+ (?{ #~ ::dd(-KeyVal,\%MATCH); $MATCH = { $MATCH{Key} => $MATCH{Val} }; }) }xms; };;;;;; if( $raw =~ $FROM_CONFIG ){ dd(\%/) ; #/ } else { print "## fail to match \n"; } __END__ { Objects => [ { bob => { ed => { larry => { rule5 => { "action" => "allow", "application" => "[ any ]", "category" => "[ any ]", "destination" => "[ any ]", "from" => "[ prod-L3 + ]", "hip-profiles" => "[ any ]", "log-end" => "yes", "log-setting" => "orion_log +", "log-start" => "no", "negate-destination" => "no", "negate-source" => "no", "option" => { "disable +-server-response-inspection" => "no" }, "service" => "[ any ]", "source" => "[ any ]", "source-user" => "[ any ]", "tag" => "[ some_ta +g ]", "to" => "[ corp-L3 + ]", }, rule6 => { "action" => "allow", "application" => "[ any ]", "category" => "[ any ]", "destination" => "[ any ]", "from" => "[ prod-L3 + ]", "hip-profiles" => "[ any ]", "log-end" => "yes", "log-setting" => "orion_log +", "log-start" => "no", "negate-destination" => "no", "negate-source" => "no", "option" => { "disable +-server-response-inspection" => "no" }, "service" => "[ any ]", "source" => "[ any ]", "source-user" => "[ any ]", "tag" => "[ some_ta +g ]", "to" => "[ corp-L3 + ]", }, }, }, }, }, ], }

In reply to Re^2: Parsing a config file with braces and nested braces by Anonymous Monk
in thread Parsing a config file with braces and nested braces by IamtheGorf

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.