Création d'une variable avec un "print" | Perl

Résolu
Matarela Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
Matarela Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde,

Tout d'abords j'avouerai que je suis un total débutant et qu'il serait cool de me rectifier si je viens à utiliser un mot ou une expression fausse.

Mon souci est que je souhaite créer un tableau (array) qui prend le résultat d'une condition if. Je vous montre.

if (grep {$community eq $_ } @communities)  {
#Si on trouve des données de $community égales à celles de @communities alors
print "$community;$login;$last_at;;$size;1\n";
push (@matchs, $community_matchs);
}

Ensuite j'utilise le tableau @matchs pour le re-comparer avec le tableau @communities.

if (grep {@communities ne $_) @matchs) {
print "$community;3\n";

Mon tableau @matchs est déclaré au début du "sub" mais est vide, ce qui donne un résultat faussé.

Il n'est pas facile de l'expliquer correctement (tout du moins pour moi), mais je serais prêt à donner plus d'information si nécessaire.

Merci d'avance pour votre aide.
A voir également:

2 réponses


 
Salut Matarela,

J'ai deux questions (1. et 2. ci-dessous), et un exemple de code pour toi (3.).

Je m'arrête au 1er bout de ton code pour le moment :
if (grep {$community eq $_ } @communities)  {
.

1.

Utilisé de cette façon, grep va passer en revue les éléments du tableau @communities et tester ce qui est dans le block, mettre chaque élément dans $_ et effectuer le test {$community eq $_ }.

Est-ce vraiment cela que tu veux faire : tester que la chaîne $_ (chaque élément du tableau) est égale à la chaîne $community ?

Ton commentaire semble indiquer autre chose.

2.

if (grep {$community eq $_ } @communities)  {
va retourner vrai si au moins un élément remplit la condition.

Cependant :

- tu n'auras pas la liste de ces éléments
- ce qui suit le if ne sera exécuté qu'une fois, si au moins un élément remplit la condition

Plus loin, tu utilises @matchs dans un push où tu mets le contenu de $community_matchs.

Qu'est-ce que $community_matchs est sensée contenir ?

Quel est le rapport avec les résultats du grep ?

Au final, pour y voir plus clair, je crois qu'il faudrait un exemple de données de départ et de ce que tu veux.

Peux-tu donner un tel exemple, stp ?

3.

Sinon, voilà un exemple d'usage de grep comme tu le fais :

#!/usr/bin/perl

use strict;
use warnings;

my $community = "men";
my @communities = qw(elves dwarves men hobbits ents);
my ($login,$last_at,$size);
my @matchs;
my $community_matchs;

$login = "toto";
$last_at = "truc";
$size = "pas bien gros";

if (grep {$community eq $_ } @communities) {
# Si on trouve des $community dans @communities alors
print "$community;$login;$last_at;;$size;1\n";
# j'ignore ce qu'est sensée faire la ligne suivante,
push (@matchs, $community_matchs);
}

Cela affiche :

men;toto;truc;;pas bien gros;1

Dal
0
Matarela Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
Merci beaucoup Dal, tu m'as un peu aidé même si j'ai trouvé la solution toute seule.

Bonne continuation Matarela.
0