#!/usr/local/bin/perl -w use strict; open SEQ, "< dna.file" or die $!; my @dna = ; close SEQ or die $!; chomp @dna; my $dna = join '', @dna; @dna = map {length} @dna; open LOCS, "< positions.input" or die $!; for () { # I don't know how your data is counted, watch for fencepost errors my ($start, $end) = split " "; substr( $dna, $start, $end - $start) =~ tr/CGAT/X/; } close LOCS or die $!; { local $\ = $/; open OUTFILE, "> $$.output" or die $!; # print OUTFILE for map { substr $dna, 0, $_, '' } @dna; print OUTFILE substr( $dna, 0, $_, '') for @dna; close OUTFILE or die $!; }