[PERL] Test appartenance a liste

Fermé
Qwerti Messages postés 166 Date d'inscription dimanche 2 septembre 2007 Statut Membre Dernière intervention 28 octobre 2008 - 15 juil. 2008 à 01:53
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 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.
A voir également:

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 !
:-)
2
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
13 mars 2009 à 08:20
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é
1