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

Modules Perl Discussion :

[Twig] Inserer des variables dans la construction d'un path


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut [Twig] Inserer des variables dans la construction d'un path
    Bonjour,

    J'avance peu à peu avec Perl + Twig, et après plusieurs tentatives, je n'arrive pas à insérer des variables pour construire un path, sans les variables tout fonctionne.

    sans les variables, le résultat correspond bien aux éléments OS dont l'attribut type vaut windows.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $check = $SERVEUR->children("OS[\@type=\"windows\"]");
    avec unevariable ($name),
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $check = $SERVEUR->children("$name[\@val=\"real\"]");
    ou plusieurs ($name, $value);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $check = $SERVEUR->children("$name[\@val=\"$value\"]");
    j'ai toujours ce message d'erreur :
    Can't modify reference constructor in scalar assignment at ./ccc.pl line 27, near ""real"]"
    Execution of ./ccc.pl aborted due to compilation errors.


    J'ai essayé plusieurs solutions différentes (avec les \, avec des simples quotes, en jouant avec les doubles quotes ...) sans résultat


    Une personne voit mon errreur ?

    Merci d'avance

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Oui, c'est lié à la façon dont Perl interpole les variables, il essaie d'aller le plus loin possible, ici il voit un élément de tableau "$machin[truc bidule]" et "truc bidule" est interprété comme une expression (un assignement à une référence \@type ...) puisqu'il se trouve entre les crochets...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "${name}[\@val=\"$value\"]"
    va marcher.

    --
    Jedaï

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    J'avais essayé cette possibilité, protéger la variable name en la mettant entre crochet mais j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $check = $SERVEUR->children("${name}[\@val=\"$value\"]");

    Bareword found where operator expected at ./bbb.pl line 22, near "print "Verification"
    (Might be a runaway multi-line "" string starting on line 21)
    (Do you need to predeclare print?)
    et les messages d'erreurs se poursuivent avec une série de :
    Unquoted string "de" may clash with future reserved word at ./bbb.pl line 22.
    Backslash found where operator expected at ./bbb.pl line 22, near "$name \"
    (Missing operator before \?)



    Voici un script perl simple avec lequel je tente de trouver la solution d'insertion de variables :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    #!/usr/bin/perl -w
     
    use XML::Twig;
     
    $twighandler = { "/SERVEUR" => \&SERVEUR };
    $twig= new XML::Twig(twig_handlers => $twighandler, pretty_print => 'indented' );
    $twig->parsefile( "bbb.xml");
     
     
    sub SERVEUR
    {
            my ( $twig, $SERVEUR)=@_;
            $version = "linux";
            CreateOrUpdate($SERVEUR,"OS", $version);
    }
     
    sub CreateOrUpdate
    {
            my ($SERVEUR,$name,$vers) = @_;
            $check = $SERVEUR->children(${name}[\@version=\"$vers\"]);
            print "Verification presence de : $name \n";
            if ($check == 0) {
                    print "$name n'existe pas ...\n";
            }
            else {
                    print "$name existe\n";
            }
    }
     
     
    $twig->print();
    et son fichier XML associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <SERVEUR>
            <HOSTNAME>monhost</HOSTNAME>
            <OS version="linux">debian</OS>
            <OS version="windows">win95</OS>
            <KERNEL>2.6</KERNEL>
            <NETWORK>
               <INTERFACE nic="eth0" ip="192.168.0.1" />
               <INTERFACE nic="eth1" ip="192.168.0.2" />
            </NETWORK>
    </SERVEUR>

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Jedaï,

    ca marche que je protège également la dernière variable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $check = $SERVEUR->children("${name}[\@version=\"${ver}\"]");

    Merci pour ta disponibilité et réactivité encore une fois

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Inserer un texte et des variables dans une zone de texte
    Par acpsc dans le forum Access
    Réponses: 5
    Dernier message: 05/05/2013, 17h39
  2. inserer des lignes dans une variable
    Par Erielle dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 29/10/2010, 15h29
  3. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50
  4. Inserer des elements dans une map sans rangement ?
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 07/09/2004, 11h09
  5. inserer des images dans une base de données
    Par alilou04 dans le forum Bases de données
    Réponses: 2
    Dernier message: 28/06/2004, 18h54

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