Bonjour à tous,

J'aimerais poser une question sur la façon de procéder.
J'ai deux séries d'objets ceux de $Pl1 et ceux de $Pl2.
de structure:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
sub new                                                 # fonction est définie
{
        my ($Classe, $Sequence, $Taille, $Enzyme, $Site, $Frequence, $Positions) = @_;
        my $self = {};                                  # référence anonyme vers une table de hachage vide
        bless ($self, $Classe);                         # indique que la référence est liée au package (à la classe)
        $self->{SEQUENCE} = $Sequence;
        $self->{TAILLE} = $Taille;
        $self->{ENZYME} = $Enzyme;
        $self->{SITE} = $Site;
        $self->{FREQUENCE} = $Frequence;
        $self->{POSITIONS} = $Positions;
        return $self;
}
1;
J'aimerais trouver les $self->{ENZYME} n'étant pas en commun pour $Pl1 et $Pl2. Je veux dire que $Pl1 et $Pl2 contiennent toute une série d'objets et je voudrais récupérer ceux n'étant présent que pour l'un d'eux mais aussi qu'en cas de présence $self->{FREQUENCE} (qui est numérique) soit supérieur à 1.

Je ne vois pas comment procéder au plus simple.
Je commence par récupérer mes ENZYMES communes dans @Enz_Communes.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Recherche des enzymes ne coupant qu'un des deux plasmides et coupant plus d'une fois le second
#---------------------------------------------------------------------------------------------------
 
my @Enz_Communes;
for (my $c =0; $c<$a; $c++)
{
        for (my $d = 0; $d<$b; $d++)
        {
               if ($Pl1[$c]->{ENZYME} eq $Pl2[$d]->{ENZYME})
               {
                 push (@Enz_Communes, $Pl1[$c]->{ENZYME});
               }
        }
}
Ensuite, je peux réappeller chaque objet, ne garder que ceux dont la valeur de ->{ENZYME} ne se trouve pas dans @Enz_Communes et dont ->{FREQUENCE} est supérieur à 1.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
for (my $c =0; $c<$a; $c++)
{
        my $OK = 0;
        foreach my $Enz(@Enz_Communes)
        {
                if ($Enz eq $Pl1[$c]->{ENZYME}){$OK = 1;}
        }
        if(($OK == 0) && ($Pl1[$c]->{FREQUENCE}>1))
        {
 
        }
}
for (my $d = 0; $d<$b; $d++)
{
        my $OK = 0;
        foreach my $Enz(@Enz_Communes)
        {
                if ($Enz eq $Pl2[$d]->{ENZYME}){$OK = 1;}
        }
        if(($OK == 0) && ($Pl2[$d]->{FREQUENCE}>1))
        {
 
        }
}
Est-ce que le problème est clair?
Est-ce la façon la plus logique de procéder?

Perl possède-t-il une fonction me permettant de vérifier si une valeur existe dans mon array?

Merci beaucoup,

Jasmine,


PS : programmes postés dans http://www.developpez.net/forums/sho...d.php?t=344735