use warnings; use strict; #use Data::Dumper; my $mask = '0001111111001111001111111'; my @mask; while ( $mask =~ /0+/g ) { push @mask, [ $-[0], ( $+[0] - $-[0] ) ]; } #print Dumper \@mask; #print $mask,"\n"; while (my $string = ){ #print $string; chomp $string; for (1..@mask){ my $replace = ''; #'*' x $mask[-$_][1]; #check to see substr $string, $mask[-$_][0], $mask[-$_][1], $replace; } print $string, "\n"; } __DATA__ 0123456789abcdefghijklmnopqrstuvwxyz 0121012102??????????12121212???????? 0111011102??????????12111112???????? 0111011102??????????12111112????????