yup, the sameness is the same my $FROM_CONFIG = qr{
(?<config>
^
\s*
config
(?<config_name>
[^\r\n]+
)
[\r\n]+
)
|
(?<closer> ^ \s* (?:end|next) \s* [\r\n]+ )
|
(?<edit>
^
\s*
(?i:edit)
\s*
"(?<edit_quoted> [^"]+ )"
\s*
[\r\n]+
)
|
(?<set>
^
\s*
(?i:set)
\s+
#~ (?<set_key> \w+ )
(?<type> \w+ )
\s+
#~ "(?<set_val> [^"]+ )"
#~ \s*
(?<val> [^\r\n]++ )
[\r\n]+
)
|
(?<UHOH> . )
}xms;
my @stack = {};
while( $raw =~ m{$FROM_CONFIG}g ){
my $freeze = { %+ };
#~ dd( $freeze );
if( $freeze->{config} ){
my $new = {};
$stack[-1]->{ $freeze->{config_name} } = $new;
push @stack, $new;
}elsif( $freeze->{edit} ){
my $new = {};
$stack[-1]->{ $freeze->{edit_quoted} } = $new;
push @stack, $new;
}elsif( $freeze->{set} ){
$stack[-1]->{ $freeze->{type} } = $freeze->{val};
}elsif( $freeze->{closer} ){
pop @stack;
}
}
dd( \@stack );
__END__
|