IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

[langage]Problème Perl.


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 3
    Points : 3
    Points
    3
    Par défaut [langage]Problème Perl.
    Bonjour à tous,

    Je souhaite lancer un executable avec pour parametre une variable Tab[0] sous perl sous unix.

    Je dois utiliser la fonction system (system ($commande). Mais le problème est que $commande= entre guillements pour etre lu par

    par system($commande). Si je met entre quote, il execute bien la commande .exe mais le parametre upr=Tab[0] ne s'affiche pas. Donc la commande échoue. Si je laisse entre guillements, la commande s'affiche bien mais il n'y apa de resultat.

    Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    ! /usr/bin/perl
    $File = 'upr.txt';
    open(ListMap, $File) or die "Can't open ListMap :$!";
            @Lignes = <ListMap>;
     
    foreach $Lignes (@Lignes){
                                    @Tab = split(/;/,$Lignes);
                                    print $Tab[0]; print $Tab[1];
     
                            print $Tab[0];
                                    $command01='$UXEXE/uxlst upr upr=$Tab[0] upr=$Tab[1]';
                                    print $command01;
                                    system ($command01);
     
     
    }
     
    close(ListMap);
    Soit on met $commande entre quote et la commande s'affiche en erreur.
    Soit on met $commande entre guillemet et le parametre affiche upr=Tab[0].

    Merc de me répondre vite.

    Fred.

    Balises [ code ] et [ code ] ajoutées par 2Eurocents

  2. #2
    Rédacteur
    Avatar de Giovanny Temgoua
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2003
    Messages
    3 830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2003
    Messages : 3 830
    Points : 4 006
    Points
    4 006
    Par défaut
    Bonjour,

    Merci de lire les règles du forum et la page d'aide aux nouveaux.

    Vous n'avez pas posté dans le bon forum. Je déplace donc dans le forum approprié.

    A+

  3. #3
    Membre actif Avatar de Gamdwin
    Inscrit en
    Avril 2005
    Messages
    186
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 186
    Points : 207
    Points
    207
    Par défaut
    Le comportement que tu constates est tout à fait normal.

    En effet, le contenu d'une chaîne entre apostrophes (car. ' ) n'est pas interprété par le PERL, au contraire du contenu d'une chaîne entre guillemets (car. " ).

    Ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl -w
     
    use strict;
     
    my $chaine = "toto";
     
    print '$chaine';
    print "\n";
     
    print "$chaine";
    print "\n";
    Affichera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ perl test.pl
    $chaine
    toto
    $

    Pour le problème que tu rencontres, tu as dans ta chaîne d'exécution un dollar (car. $) qui ne doit pas être interprété par le PERL (celui de "$UXEXE"), et tes variables $Tab[0] et $Tab[1] qui, elles, doivent l'être.

    Tu as plusieurs solutions pour parvenir à tes fins.

    Soit tu demandes à PERL d'interpréter le contenu de ta chaîne en l'entourant de guillemets, et tu "échappes" le caractère dollar que tu ne veux pas voir interprété par PERL, à l'aide du caractère spécial backslash (car. \ ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $command01="\$UXEXE/uxlst upr upr=$Tab[0] upr=$Tab[1]";
    Soit tu construis ta chaîne $command01 en concatenant tes variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $command01 = '$UXEXE/uxlst upr upr=' . $Tab[0] . ' upr=' . $Tab[1];
    "I hate quotations. Tell me what you know." (Ralph Waldo Emerson)

Discussions similaires

  1. [langage] Pourquoi utilisez-vous Perl ?
    Par R3iTt0R dans le forum Langage
    Réponses: 10
    Dernier message: 23/06/2004, 14h17
  2. [langage] chaine de caractere perl
    Par oli2a dans le forum Langage
    Réponses: 4
    Dernier message: 03/09/2003, 15h56
  3. [langage] Pb avec Active perl :s
    Par Cetras dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2003, 13h28
  4. [langage] Commande Unix en Perl
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 20/11/2002, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo