use strict; use warnings; use Data::Dump::Streamer; my %replace = ( R => '{A,G}', S => '{C,G}', K => '{G,T}', ' ' => '_', ); my %seqs = ( seq1 => {org => "CAG GTR CAG CTG AAG SAG TCA GG"}, seq2 => {org => "GAK GTG CAG CTT CAG CAG TCR GG"} ); for my $seqKey (keys %seqs) { $seqs{$seqKey}{glob} = $seqs{$seqKey}{org}; $seqs{$seqKey}{glob} =~ s/$_/$replace{$_}/g for keys %replace; push @{$seqs{$seqKey}{expanded}}, map {y/_/ /; $_} glob $seqs{$seqKey}{glob}; } Dump (\%seqs);