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 :

petite question sur bout de code aberrant ^^


Sujet :

Langage Perl

  1. #1
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut petite question sur bout de code aberrant ^^
    En codant, il arrive de changer d'avis, d'utiliser un hash à la place d'une liste etc...

    Si le script est un peu long on peut oublier la structure de base qu'on avait choisie, et faire des trucs bizarres comme résumé ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # be strict
    use strict;
    use warnings;
     
    use Data::Dumper;
    my %hash = (
    	'value1' => {}
    );
     
    $hash{'value1'}++; # aïe ^^
     
    print Dumper %hash;
    on obtient des valeurs aléatoires !
    est-ce que quelqu'un saurait me dire pourquoi ? c'est juste par curiosité, mais j'aime bien comprendre ce qu'il se passe

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bonjour,

    La valeur aléatoire est sans doute en rapport avec l'adresse mémoire de {}. Le hash n'est pas toujours alloué au même emplacement mémoire et son adresse varie.

  3. #3
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Ton hash contient une référence, donc une adresse mémoire.

    Je viens de faire un essai sous le debugger. Contenu du hash après initialisation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      DB<1> x %hash
    0  'value1'
    1  HASH(0x302a4ee4)
    Valeur après le ++:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      DB<4> p $hash{'value1'}
    808079077
    Or, l'adresse hexa 0x302a4ee4 se convertit en décimal en 808079076. Avec le ++, on obtient bien 808079077.

    Autrement dit, le ++ impose un contexte numérique et force la conversion d'une adresse hexa en un entier simple puis ajoute 1 à la valeur obtenue.

    Le valeurs obtenues ne sont aléatoires que parce que les adresse mémoire obtenue ne sont pas toujours les mêmes.

    EDIT: grillé par Djibril.

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    merci pour vos réponses !

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

Discussions similaires

  1. [ATL] Petite question sur les progress bar
    Par MrMaze dans le forum MFC
    Réponses: 1
    Dernier message: 06/05/2005, 09h40
  2. [Visuel XP] Petite question sur le theme XP...
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 12
    Dernier message: 20/01/2005, 14h41
  3. petite question sur le composant IBX ...
    Par vbcasimir dans le forum Bases de données
    Réponses: 4
    Dernier message: 05/01/2005, 10h33
  4. Réponses: 3
    Dernier message: 08/12/2004, 13h58
  5. Petite question sur les performances de Postgres ...
    Par cb44 dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 13/01/2004, 13h49

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