Here is another attempt at expanding a one-liner into a big script, this one using a canned
/regexp?/i:
use strict;
use warnings;
use Regexp::Common qw(balanced);
my @streams = (qw(
[ABC][DEF][HIJ]
ABC[DEF]HI[JK][LMNO]PQ
[A][B]C[DEF]HI[JK][LMNO]PQ
[A][B]C[DEF]HI[JK][LMNO]P[Q]
[ABCDEFHIJKLMNOPQ]
ABCDEF
), q());
my $PATTERN = $RE{balanced}{-parens=>'[]'};
for my $input (@streams) {
print qq($input => );
my @pieces = ();
while ($input =~ s/(\w*)($PATTERN)//) {
my ($prematch, $match) = ($1, $2);
push @pieces, split //, $prematch;
push @pieces, $1 if $match =~ /(\w+)/;
}
push @pieces, split //, $input if length $input;
printf qq(%s\n), join qq( ), @pieces;
}
__END__
which prints:
[ABC][DEF][HIJ] => ABC DEF HIJ
ABC[DEF]HI[JK][LMNO]PQ => A B C DEF H I JK LMNO P Q
[A][B]C[DEF]HI[JK][LMNO]PQ => A B C DEF H I JK LMNO P Q
[A][B]C[DEF]HI[JK][LMNO]P[Q] => A B C DEF H I JK LMNO P Q
[ABCDEFHIJKLMNOPQ] => ABCDEFHIJKLMNOPQ
ABCDEF => A B C D E F
=>
Cheers.