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

Programmation et administration système Perl Discussion :

Compilation et Debugage!


Sujet :

Programmation et administration système Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Par défaut Compilation et Debugage!
    Bonjour,

    Ca va vous sembler con, mais j'aimerais comprendre pourquoi mon interpréteur gueule. Ce code marche :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use YAML;
    use Data::Dumper;
     
    open my $fh, '<', 'config.yml'
            or die "can't open config file: $!";
     
    my $yml = do { local $/; <$fh> };
     
    my $config = Load($yml);
    print Dumper($config), "\n";
    #print "$_ $config{$_}\n" for (keys %config);
    #while (my ($k,$v)=each %config){print "$k $v\n"}
    #print "$config\n";
    Sortie :
    # ./yaml2.pl
    $VAR1 = {
    'NAME' => 'John Doe',
    'CONTACTS' => [
    'John',
    'Paul',
    'George'
    ],
    'PHONE' => {
    'Work' => '123-5555',
    'Home' => '123-4444'
    },
    'ADDRESS' => '123 Main St.'
    };
    Ce code marche :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use YAML;
    use Data::Dumper;
     
    open my $fh, '<', 'config.yml'
            or die "can't open config file: $!";
     
    my $yml = do { local $/; <$fh> };
     
    my $config = Load($yml);
    #print Dumper($config), "\n";
    #print "$_ $config{$_}\n" for (keys %config);
    #while (my ($k,$v)=each %config){print "$k $v\n"}
    print "$config\n";
    Sortie :
    # ./yaml2.pl
    HASH(0x1973568)
    Ce code ne marche pas :
    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use YAML;
    use Data::Dumper;
     
    open my $fh, '<', 'config.yml'
            or die "can't open config file: $!";
     
    my $yml = do { local $/; <$fh> };
     
    my $config = Load($yml);
    #print Dumper($config), "\n";
    print "$_ $config{$_}\n" for (keys %config);
    #while (my ($k,$v)=each %config){print "$k $v\n"}
    #print "$config\n";
    Sortie:
    # ./yaml2.pl
    Global symbol "%config" requires explicit package name at ./yaml2.pl line 15.
    Global symbol "%config" requires explicit package name at ./yaml2.pl line 15.
    Execution of ./yaml2.pl aborted due to compilation errors.
    Ce code ne marche pas :

    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
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use YAML;
    use Data::Dumper;
     
    open my $fh, '<', 'config.yml'
            or die "can't open config file: $!";
     
    my $yml = do { local $/; <$fh> };
     
    my $config = Load($yml);
    #print Dumper($config), "\n";
    #print "$_ $config{$_}\n" for (keys %config);
    while (my ($k,$v)=each %config){print "$k $v\n"}
    #print "$config\n";
    [/CODE]
    Sortie :
    # ./yaml2.pl
    Global symbol "%config" requires explicit package name at ./yaml2.pl line 16.
    Execution of ./yaml2.pl aborted due to compilation errors.
    Mon fichier .yml juste pour la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ---
    ADDRESS: 123 Main St.
    CONTACTS:
      - John
      - Paul
      - George
    NAME: John Doe
    PHONE:
      Home: 123-4444
      Work: 123-5555
    Je veux bien résoudre le problème, mais j'aimerais savoir ce que perl me réclame là du coup, car ma variable est bien déclarée.

    Merci beaucoup à vous les experts.

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Décembre 2012
    Messages : 43
    Par défaut
    elle est bien déclarée, mais pas dans le bon type

    my $config --> déclaration d'un scalaire
    my %config --> déclaration d'un hash

    tu ne peux pas déclarer une variable $config en scalaire et l'utiliser comme un hash (ligne 16 dans ton dernier code)

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Par défaut
    Tu te doute bien que j'aurais essayé le symbole de % avant de poster Jiheme44, mais non ça ne change rien.

    Au contraire ça me génère une erreur de type, et je pense que c'est lié à la lvalue qui doit être ici une hashref, peut être du fait de la fonction Load?
    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
     
    #!/usr/bin/perl
    use strict;
    use warnings;
     
    use YAML;
    use Data::Dumper;
     
    open my $fh, '<', 'config.yml'
            or die "can't open config file: $!";
    my $yml = do { local $/; <$fh> };
     
    my %config = Load($yml);
    #print Dumper($config), "\n";
    print "$_ $config{$_}\n" for (keys %config);
    #while (my ($k,$v)=each %config){print "$k $v\n"}
    #print "$config\n";
    Erreur :
    # ./yaml2.pl
    Reference found where even-sized list expected at ./yaml2.pl line 13, <$fh> line 1.
    Use of uninitialized value $config{"HASH(0x2078be8)"} in concatenation (.) or string at ./yaml2.pl line 15, <$fh> line 1.
    HASH(0x2078be8)

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Décembre 2012
    Messages : 43
    Par défaut
    Citation Envoyé par sympaval Voir le message
    Tu te doute bien que j'aurais essayé le symbole de % avant de poster Jiheme44, mais non ça ne change rien.
    ça me semblait tellement évident qu'il m'a fallu intervenir.


    apparemment, l'utilisation du scalaire semble correct car c'est la façon indiqué dans le CPAN.
    http://search.cpan.org/~ingy/YAML-0.88/lib/YAML.pm

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2009
    Messages
    218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2009
    Messages : 218
    Par défaut
    Bonsoir,

    Merci, mais j'ai résolu le souci en castant la valeur de retour de la fonction Load() en hash. En effet les fonctions Load() et LoadFile() de la lib yaml implémentent une sorte de polymorphisme, elles ont la même signature à la différence près du paramètre qui est passé à la fonction : dans un cas une chaine de caractères/un flux yaml, et dans l'autre un fichier.

    Voici la solution à mon problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my %config = %{Load($yml)};
    Merci à toi Jiheme44

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 10/10/2002, 19h19
  2. [Installation] Borland Compiler 5.5 sous XP
    Par Ligey dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 28/09/2002, 22h45
  3. dans le fond, la compilation...
    Par deltapositive dans le forum C++Builder
    Réponses: 5
    Dernier message: 17/09/2002, 12h14
  4. Vitesse de compilation
    Par srvremi dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/07/2002, 16h49
  5. Réponses: 1
    Dernier message: 27/05/2002, 01h44

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