use warnings; use strict; my $mask_input = '0000000000'; my %intervals = ( 0, ( do { local $/; } =~ /(\d+)/g ), 1+length $mask_input ); while( my( $start, $end ) = each %intervals ) { substr( $mask_input, $start, $end-$start-1 ) =~ tr/N/N/c; } print "$mask_input\n"; __DATA__ chrX 1 3 chrX 5 6 chrX 8 9