Ciao a tutti,
ho un problema con il confronto di due array composti da hash referenziati
array1[hash1,hash3,hash5,hash7]
array2[hash1,hash5]
tutti gli hash sono composti così
hash{"nn_ini"->valore, "nn_fin"->valore, "codice"->valore, "seq"->valore}
i valori contenuti nelle chiavi di alcuni hash possono essere identici (es. valori hash1 di array1= valori hash1 di array2)
mi serve di stampare i valori delle hash contenute in array1 che non compaiono in array2
per fare questo ho fatto un doppio foreach ecco il codice:
foreach my$glimm(@array1){
foreach my $ncbi (@array2){
if (($$glimm{"nn_ini"}==$$ncbi{"nn_ini"})&&($$glimm{" nn_fin"}==$$ncbi{"nn_fin"})){
print FILE ">",";",$$glimm{"nn_ini"},";",$$glimm{"nn_fin"},"; ",$$ncbi{"codice"},"\n",$$glimm{"seq"},"\n";
}
elsif (($$glimm{"nn_ini"}==$$ncbi{"nn_ini"})&&($$glimm{" nn_fin"}!=$$ncbi{"nn_fin"})){
print FILE ">",";",$$glimm{"nn_ini"},";",$$glimm{"nn_fin"},"; ",$$ncbi{"codice"},";","first_codon","\n",$$glimm{ "seq"},"\n";
}
elsif (($$glimm{"nn_ini"}!=$$ncbi{"nn_ini"})&&($$glimm{" nn_fin"}==$$ncbi{"nn_fin"})){
print FILE ">",";",$$glimm{"nn_ini"},";",$$glimm{"nn_fin"},"; ",$$ncbi{"codice"},";","last_codon","\n",$$glimm{" seq"},"\n";
}
elsif(($$glimm{"nn_ini"}!=$$ncbi{"nn_ini"})&&($$gl imm{"nn_fin"}!=$$ncbi{"nn_fin"})){
print ">",$$glimm{"nn_ini"},";",$$glimm{"nn_fin"},"\n",$ $glimm{"seq"},"\n";
next;
}
}
}
l'ultimo elsif mi da problema, entra in loop...
ho anche provato a sostituirlo con un else e togliere le condizioni, pensando che dovrebbe stampare tutto il resto non compreso nelle condizioni iniziali invece niente, sempre loop
potete aiutarmi?
grazie 1000