my @substr_mat = (); my $substr_tmp1 = (); my $substr_tmp2 = (); my $start = (); my $end = (); my %map1 = (); my %map2 = (); my $m = 0; foreach my $str (sort {($substrings{$b}[1]-$substrings{$b}[0]) <=> ($substrings{$a}[1]-$substrings{$a}[0]) || $substrings{$a}[0] <=> $substrings{$b}[0]} keys %substrings){ $substr_tmp1 = ''; $substr_tmp2 = ''; $start = -1; $end = -1; for( my $i = $substrings{$str}[0]; $i <= $substrings{$str}[1]; $i++){ if( ! exists $map1{$i}){ $map1{$i} = 1; $substr_tmp1 .= "$s1[$i] "; if($start == -1){ $start = $end = $i; } else { $end = $i; } } } next if $start == -1; $start = -1; $end = -1; for( my $i = $substrings{$str}[2]; $i <= $substrings{$str}[3]; $i++){ if( ! exists $map2{$i}){ $map2{$i} = 1; $substr_tmp2 .= "$s2[$i] "; if($start == -1){ $start = $end = $i; } else { $end = $i; } } } next if $start == -1; if( length($substr_tmp1) <= length($substr_tmp2) ){ $substr_mat[$m++] = $substr_tmp1; } else { $substr_mat[$m++] = $substr_tmp2; } }