Str: AGACGAGTA Mask: 001111100 --------------- Res: AGxxxxxTA #### use strict; use warnings; my $seq = "AGACGAGTA"; my $mask=''; vec ($mask,$_,1)=1 for (2..6); print "Str: $seq\n"; print "Mask: ", unpack ("b*",$mask),"\n"; #### Str: AGACGAGTA Mask: 00111110 #### #Solution 1: my @mask = split "",unpack ("b*",$mask); my @seq = split "",$seq; print "Res: "; print map {! shift @mask ? $_ : "x"} @seq; print "\n"; #### # Solution 2: my $s_mask = unpack ("b*",$mask); my $pos=0; print "Res: "; while ($pos < length($seq)){ no warnings; ## $s_mask could be shorter than $seq print ! substr($s_mask,$pos,1) ? substr($seq,$pos,1) : "x"; $pos++; } print "\n"; #### Res: AGxxxxxTA