use strict; use warnings; use Data::Dumper; my @genes; my $screen = "ATCGATCGXXXXXATCGATXXXACTGCTACGGTACXXXAATTATXGCGCGXXT"; my @genes; while ( $screen =~ /([^X]+)/g ) { my $start = pos($screen) - length($1); push @genes, [$start, $1]; } print Dumper \@genes;