[PERL] - diff d'une sortie d'un programme [Résolu/Fermé]

Signaler
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
-
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
-
Bonjour,
Je programme en ce moment un Shell et pour tester mes fonctions je me suis mis au perl. Ce language etant plus puissant que le script shell j'essaie de le maitriser. Mais voila j'ai un souci pour faire la diff de mes sortie d'execution.
Pour lancer mon binaire j'utilise la fonction system() mais je n'arrive pas a faire de diff.
Lorsque j'essaie
if (print(system("../42SH --version")) eq "42sh version is 0.5\n")
{
print("OK\n");
}
else
{
print("KO\n");
}

des zero s'affiche avant ma diff et j'ai droit a un KO a chaque fois meme si ma sortie est bonne.
Si quelqu'un peut m'aider je lui en serais infiniment reconnaissant.
Merci ;)

4 réponses

Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Salut,

Si tu veux capturer le résultat d'une commande il faut utiliser plutôt qx// au lieu de system()
voici un exemple qui pourra peut être t'aider
#!/usr/bin/perl
use strict;use warnings;
my $cmd = qx/sh --version | head -1/;
print "$cmd\n";
if (qx/sh --version | head -1/ eq "GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)\n"){
        print "OK\n";
}else{
        print "KO\n";
}
__END__

Exécution
lami20j@debian:~/trash$ perl ccm.pl
GNU bash, version 3.1.17(1)-release (i486-pc-linux-gnu)

OK

Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
Merci pour ta reponse mais mon probleme persiste toujours,
avec tes conseils j'ai essaye mais j'obtiens:
"Can't exec "qx/../42sh": No such file or directory at ./moulette.pl line 80.
Use of uninitialized value in concatenation (.) or string at ./moulette.pl line 81."
j'ai juste modifie "qx/sh" par "qx/../42sh":

my $cmd = `qx/../42sh --version | head -1/`;
print "$cmd\n";
if ("qx/../42sh --version | head -1/" eq "42sh version is 0.5\n"){
print "OK\n";
}else{
print "KO\n";
}

Si tu pense savoir d'ou viens le probleme je cherche toujours...
En tout cas merci quand meme.
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 544
Salut,

utilise le chemin absolu
comme la séparation des répertoires est faite avec des slash alors qx// ne vas rien comprendre puisque après le 2 slash Perl va croire qu'il doit lire une commande

Donc en ce cas tu peut faire comme ça
- mettre un backslash avet chaque slash à l'intérieur de qx//
qx/\/chemin\/vers\/commande/
- utilise un autre séparateur pour qx
qx[/chemin/vers/commande]
qx(/chemin/vers/commande)
qx{/chemin/vers/commande}
--

lami20j
Messages postés
24
Date d'inscription
vendredi 30 novembre 2007
Statut
Membre
Dernière intervention
23 août 2008
1
Un grand merci a mon sauveur.
La solution etait bien de changer de separateur.
Mon prgramme de diff marche nikel.
Merci vraiment.
Voila la solution:

my $pwd = `pwd`;
if (qx{$pwd../42sh --version} eq "42sh version is 0.5\n"){
print "OK\n";
}else{
print "KO\n";
}