[PERL] Test appartenance a liste
Qwerti
Messages postés
166
Statut
Membre
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
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.
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.
Configuration: Windows XP Firefox 3.0
2 réponses
-
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 !
:-)-
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 exemplelami20j@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
-
-
Salut,
D'autres possibilitéslami20j@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é