my $string='{CAT,CAC}TGG{GTT,GTC,GTA,GTG}{CCT,CCC,CCA,CCG}'; 1 while $string =~ s/([^{\s]*){(.*?)}(\S*)/@{[map $1.$_.$3, split ',', $2]}/; print $string;