[PERL] - diff d'une sortie d'un programme

Résolu
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 ;)
Configuration: Mac OS X
Firefox 2.0.0.11

4 réponses

  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";
    }
    1. Modérateur
      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
      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.
        1. Modérateur
          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