> please explain in simple way

Can't be simper! Just write a parser for the input format.

(I had to add the missing double quotes at lines 14 and 38.)

#!/usr/bin/perl use warnings; use strict; use feature qw{ say }; use Marpa::R2; my $dsl = << '__DSL__'; :default ::= action => ::first lexeme default = latm => 1 Block ::= Outer Block action => append | Outer Outer ::= Header Body (semi2) action => keyval || Header Body action => keyval Header ::= varname (rpar) Body ::= Assignment action => expand | Assignment Body action => append | Inner | Inner Body action => append | (Garbage) action => [] | (Garbage) Body InBody ::= Assignment action => expand | Assignment InBody action => append | (Garbage) action => [] | (Garbage) InBody Assignment ::= varname (eq) Quoted action => assign Quoted ::= (quote) string (quote) action => quoted Inner ::= Header InBody (semi2) action => keyval Garbage ::= Cat | Case | Esac | Echo Cat ::= cat path | cat path semi1 Case ::= case What in Esac ::= esac Echo ::= echo Quoted What ::= varname | bq varname bq :discard ~ whitespace whitespace ~ [\s]+ varname ~ [\w]+ string ~ [\w.$/\\]+ quote ~ '"' semi1 ~ ';' semi2 ~ ';;' eq ~ '=' rpar ~ ')' path ~ [\w/]+ cat ~ 'cat' case ~ 'case' in ~ 'in' bq ~ '`' esac ~ 'esac' echo ~ 'echo' __DSL__ sub quoted { qq("$_[1]") } sub assign { [ @_[1, 2] ] } sub append { [ $_[1], 'ARRAY' eq ref $_[2] ? @{ $_[2] } : $_[2] ] } sub keyval { +{ $_[1] => $_[2] } } sub expand { [ $_[1] ] } sub addkey { +{ %{ $_[1] }, %{ $_[2] } } } my $grammar = 'Marpa::R2::Scanless::G'->new({ source => \$dsl }); open my $IN, '<', shift or die $!; my $input = do { local $/; <$IN> }; my $parsed = ${ $grammar->parse(\$input, 'main') }; for my $h (@$parsed) { my $key = (keys %$h)[0]; for my $val (@{ $h->{$key} }) { { ARRAY => sub { say join ': ', $key, join '=', @$val }, HASH => sub { output_hash($key, $val) }, }->{ ref $val }->(); } } sub output_hash { my ($key, $val) = @_; say for map { join ': ', $key, $_ } map { my $k = $_; map { "$k: " . join '=', @$_ } @{ $val->{$k} } } keys %$val; }

($q=q:Sq=~/;[c](.)(.)/;chr(-||-|5+lengthSq)`"S|oS2"`map{chr |+ord }map{substrSq`S_+|`|}3E|-|`7**2-3:)=~y+S|`+$1,++print+eval$q,q,a,

In reply to Re: extract content for nested pattern in a file by choroba
in thread extract content for nested pattern in a file by ararghat

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.