my $string = "ATCGC[ATCG]AAA[GA]"; my @out = ""; $string=~s!([^\[]*)(\[([^\[]*)\])?!@out=map{my$c=$_;map{$_.$1.$c}@out}split'',$3if$1or$3!ge; print join("\n", @out) . "\n";