Les Allergies
Alimentaires
Posez votre question Signaler

[PERL] Test appartenance a liste

Qwerti 167Messages postés 2 septembre 2007Date d'inscription - Dernière réponse le 13 mars 2009 à 08:47
Bonjour a tous,
Je voudrai savoir s'il y a une commande pour tester l'appartenance a une liste/tableau :
# J'ai une liste/tableau :
my @t = ( 'element 1', 'element 2', 'element 3');
# et disons deux variables :
my $elementTRUE = 'element 2';
my $elementFALSE = 'element 4';
Et je voudrai savoir s'il existe un moyen tres compact de tester l'appartenance des
variables $elementTRUE et $elementFLASE a @t, sans avoir a ecrire explicitement la
boucle de test.
Merci d'avance pour vos reponses !
- Qwerti.
Lire la suite 

[PERL] Test appartenance a liste »

3 réponses
Réponse
+1
moins plus
Salut !

Il y a une méthode simple pour faire cela : une expression régulière.

Il suffit de savoir que l'expression "@tab" correspond à la concaténation des éléments de @tab.

On peut alors écrire :

$val="Valeur a chercher";
if ( "@tab" =~ /$val/) {
print "la valeur est dans le tableau\n";
} else {
print "la valeur n'est PAS dans le tableau\n";
}

voila !
:-)
lami20j- 13 mars 2009 à 08:47
Salut,

"@tab" correspond à la concaténation des éléments de @tab
Pas tout à fait.
L'interpolation de @t donne la liste des éléments séparés par un espace (ce n'est pas une concaténation)
Un exemple
lami20j@debian:~$ perl vider.pl
a b c d e f g h i j k l m n o p q r s t u v w x y z
abcdefghijklmnopqrstuvwxyz
lami20j@debian:~$ cat vider.pl
#!/usr/bin/perl
use strict;use warnings;

my @t='a'..'z';

# l'interpolatoin de @t
my $elementstab="@t";
print "$elementstab\n";
# la concatenation des éléments de @t
my $concatenation = join "",@t;
print "$concatenation\n";
__END__
lami20j@debian:~$ perl vider.pl
a b c d e f g h i j k l m n o p q r s t u v w x y z
abcdefghijklmnopqrstuvwxyz
Pour traiter les éléments d'une liste on utilise en général foreach ou for.
foreach my $element(@tab){
....traitement...
}
D'autres fonction qui peuvent être utiliser : grep, map, join, pack, sort, pop, push, shift, unshift, splice
Ajouter un commentaire
Réponse
+1
moins plus
Salut,

D'autres possibilités
lami20j@debian:~/trash$ cat ccm_grep.pl
#!/usr/bin/perl
#use strict;use warnings;

my @t = ( 'element 1', 'element 2', 'element 3');
print "\@t = @t\n";
print "\n","*" x 20,"\n\n";

# affiche seulement les éléments trouvés
my @cherche = grep{ /element\s*[24]/ } @t;
print "Trouvés : @cherche\n";

# ligne de séparation
print "\n","*" x 20,"\n\n";

# affiche les éléments trouvés et non trouvés
for my $e('element 2', 'element 4'){
  if (grep { /$e/ } @t){
    print "$e trouvé\n";
  }else{
    print "$e non trouvé\n";
  }
}

lami20j@debian:~/trash$ perl ccm_grep.pl
@t = element 1 element 2 element 3

********************

Trouvés : element 2

********************

element 2 trouvé
element 4 non trouvé
Ajouter un commentaire
Ce document intitulé « [PERL] Test appartenance a liste » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?