Итак, мой код настроен так, как показано ниже
#!/usr/bin/perl -w
# vim: set expandtab ts=2 bg=dark smartindent shiftwidth=2 softtabstop=2 :
#
use strict;
use Data::Dumper;
use Getopt::Long qw(GetOptions);
####use warnings;
use 5.010;
####my @arr1 = ( "0", "1", "2", "3", "4"); # OK
my @arr1 = ( "0", "1", "3", "4"); # Gap-1... seq2
my $arr1_len = scalar @arr1;
##
my @arr2 = ( "0", "1", "2", "3", "4"); # OK
####my @arr2 = ( "0", "1", "3", "4"); # Gap-2... seq2
my $arr2_len = scalar @arr2;
Я пытаюсь перебрать каждый список, сравнить его с каждым другим и обнаружить любые пробелы в последовательности (значения являются последовательными номерами каждого потока - на данный момент они последовательные, но они не должны быть / не будут в пример из реального мира)
EFFORT 1 = если я использую внутренний цикл for для arr2, он всегда начинается с indx 0 - т. Е. Указатель / число не помечается после того, как у нас есть совпадение
EFFORT 2 = если я делаю фальшивый внутренний цикл / arr2, то я не могу перейти к следующему j без увеличения счетчика i
... Я подозреваю, что должен быть простой способ сделать это - но я не могу понять это
УСИЛИЕ 1
ARR1: for (my $i=0; $i <= ($arr1_len-1); $i++) {
print "i[$i]=$arr1[$i]\n";
ARR2: for (my $j=0; $j <= ($arr2_len-1); $j++) {
print "... j[$j]=$arr2[$j] -- ((i[$i]=$arr1[$i]))\n";
# seq num match
if ( $arr1[$i] eq $arr2[$j]){
print "MATCH of seq_num [$arr1[$i]|$arr2[$j]]\n";
shift @arr2;
next ARR1;
} # end of seq num match
# gap in arr2
if ( $arr1[$i] < $arr2[$j]){
print "GAP in new [$arr1[$i]|$arr2[$j]]... New Missing $arr1[$i]\n";
next ARR1;
} # end of gap in arr2
# gap in arr1
if ( $arr2[$j] < $arr1[$i]){
print "GAP in old [$arr1[$i]|$arr2[$j]]... Old Missing $arr2[$j]\n";
next ARR2;
} # end of gap in arr1
} # end of j loop
} # i loop
УСИЛИЕ 2
my $j = 0;
ARR1: for (my $i=0; $i <= ($arr1_len-1); $i++) {
print "i[$i]=$arr1[$i]\n";
if ( $j <= ($arr2_len-1) ) {
print "... j[$j]=$arr2[$j] -- ((i[$i]=$arr1[$i]))\n";
# seq num match
if ( $arr1[$i] eq $arr2[$j]){
print "MATCH of seq_num [$arr1[$i]|$arr2[$j]]\n";
$j++;
next ARR1;
} # end of seq_num match
# probable gap in arr2
if ( $arr1[$i] < $arr2[$j]){
print "GAP in new [$arr1[$i]|$arr2[$j]]... New Missing $arr1[$i]\n";
next ARR1;
} # end of gap in arr2
# probable gap in arr1
if ( $arr2[$j] < $arr1[$i]){
print "GAP in old [$arr1[$i]|$arr2[$j]]... arr1 Missing $arr2[$j]\n";
# CANT NEXT J WITHOUT INCREASING I ?!?
} # end of gap in arr1
} # end of fake j loop!
} # end of i loop