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 :

prob avec utilisation de package


Sujet :

Modules Perl

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut prob avec utilisation de package
    rebonjour la liste,

    Je me trouve à nouveau face à un petit problème, trivial soit,

    je crée un package test comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    package test;
     
    sub new
    {
         my ($nom,$prenom,$age)=@_;
         my $test={};
         $test->{nom}=$nom;
         etc...
     
         return bless $test;
    }
    1;
    je l'utilise dans mon programme :
    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
    use test;
     
    sub ajout
    {
          print "Entrez le nom : ";my $nom=<STDIN>;chomp($nom);
          etc...
     
         $test = new test($nom,$prenom,$age);
         #inscription dans un fichier
          open (FILE, ">>test.txt") or die "...";
          printf (FILE "$test\n);
          close FILE;
    }
     
    &
    ce qui ne va pas c'est qu'il inscrit "HASH...." dans le fichier, pourquoi ?
    dois-je faire un réferencement ? je ne sais plus vraiment comment...

    d'avance merci.

  2. #2
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    ne pas tenir compte de l'erreur de frappe à :

  3. #3
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Il faut afficher les elements de ta classe.
    Il faut faire comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print $test->{nom}
    print ${$test}{nom}

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    donc il faut que je fasse un printf pour chaque élement de la classe ?

  5. #5
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    Autant faire un hachage !!
    à quoi ca sert alors la classe ? je ne saisi pas l'interet

  6. #6
    Membre expérimenté
    Avatar de nyal
    Profil pro
    Inscrit en
    Septembre 2002
    Messages
    622
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2002
    Messages : 622
    Points : 1 428
    Points
    1 428
    Par défaut
    Citation Envoyé par martijan
    Autant faire un hachage !!
    à quoi ca sert alors la classe ? je ne saisi pas l'interet
    Essaye de faire la meme chose avec un hachage provenant d'un package.
    Il te faudra rajouter bon nombre lignes de code. Notamment pour l'exportation des variables.

    Cependant je ne suis pas un specialiste de la POO sous perl. Mais tu dois avoir un bon nombre de possibilites quand tu approfondis l'utilisation. (Heritage, ...).

  7. #7
    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
    Euh... Tu as déjà essayé d'imprimer un pointeur en C ??
    Il faut souvent le répèter, mais un objet en Perl est une simple référence qui sait ce qu'elle est, elle a donc quelques comportements particuliers (en particulier, elle peut avoir des "méthodes", notons d'ailleurs que si l'objet est une référence, la classe est un simple paquetage, qui peut hériter d'autres paquetages). Quand on imprime une référence dans Perl, on imprime le nom de la structure de donnée pointée par la référence, puis son adresse mémoire, pour imprimer son contenu, il faut la déréférencer, ici par exemple tu pourrais faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #pourquoi utilises tu printf et pas print, il n'y a pas de format dans ta string ??
    print  FILE "%{$test}";
    Ca ne t'imprimera pas un truc très utile cependant, juste les couples clé valeur, dans le désordre... Pour obtenir un truc propre, il vaut effectivement mieux faire élément par élément, dans l'ordre que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach( qw(nom prenom age) ) {
        print FILE $test->{$_};
        # ou si tu veux imprimer aussi les clés :
        # print FILE "$_ : " . $test->{$_} . "\n":
    }
    Evidemment, dans la programmation orientée objet, il est considéré comme préférable d'intégrer la transformation d'un objet en string dans une méthode, de façon à pouvoir la réutiliser tant qu'on veux :
    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
     
    package test;
     
    sub new
    {
         my ($nom,$prenom,$age)=@_;
         my $test={};
         $test->{nom}=$nom;
         etc...
     
         return bless $test;
    }
     
    sub to_string
    {
        my $self = shift;
        my $str = "";
        foreach( qw(nom prenom age) ) {
            $str .=  "$_ : " . $test->{$_} . "\n":
        }
        return $str;
    }
    1;
    puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    use test;
     
    sub ajout
    {
          print "Entrez le nom : ";my $nom=<STDIN>;chomp($nom);
          etc...
     
         $test = new test($nom,$prenom,$age);
         #inscription dans un fichier
          open (FILE, ">>test.txt") or die "...";
          print FILE $test->to_string() ;
          close FILE;
    }

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK merci pour les trucs

    moi je ne comprends pas pourquoi il faut référencer !

    quand je vois ta sub to_string(), je me rends compte que j'ai pas mal de chemin à faire...

    peux-tu me la commenter ligne par ligne, stp ?
    d'avance merci.

  9. #9
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    principalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( qw(nom prenom age) ) { 
            $str .=  "$_ : " . $test->{$_} . "\n":

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    Citation Envoyé par martijan
    principalement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach( qw(nom prenom age) ) { 
            $str .=  "$_ : " . $test->{$_} . "\n":
    en traduction romancée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach( qw(nom prenom age) ) {
    pour chacun des éléments suivants : nom, prenom, age

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str .=  "$_ : " . $test->{$_} . "\n":
    $str = $str concaténé à "$_ : " concaténé à "$test->{$_}" avec un retour à la ligne à la fin

    Si par exemple, tu as ces valeurs là :
    nom = TOTO
    prenom = Pouet
    age = 2

    $str aura cette tronche là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    nom : TOTO
    prenom : Pouet
    age : 2

  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    ces deux façons de procéder ci-dessous se valent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach( qw(nom prenom age) ) {
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach( "nom", "prenom", "age" ) {
    qw (signifiant quote word) met juste des " " pour chaque valeur qu'il reçoit en arguments, ici nom, prenom et age.

  12. #12
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    d'accord merci.

    encore une question concernant le sujet initial du message.

    la destruction d'une classe sert à vider la reservation mémoire ? O/N

    si je n'opérait pas de destruction, meme après l'arret du programme si je rappel ces variables, les données sont elles concervées ?

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 582
    Points : 2 030
    Points
    2 030
    Par défaut
    J'suis pas trop calé en programmation objet, j'aime pas vraiment ça

    Mais tout ce que je peux te dire, c'est qu'à la fin d'un programme Perl, Perl rend la mémoire qu'il a utilisé au système d'exploitation, mais il lui est difficile de rendre la mémoire occupée par des objets consacrés via des méthodes (classes). Ceci expliquant pourquoi chaque classe doit comporter un constructeur (new) et un destructeur (destroy).

    Disons que ça fait plus propre de killer les objets avant de quitter ton programme.

  14. #14
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 58
    Points : 22
    Points
    22
    Par défaut
    OK c'est clair, merci

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

Discussions similaires

  1. Utiliser deux packages avec schémagen
    Par Edta dans le forum ANT
    Réponses: 2
    Dernier message: 19/08/2009, 16h15
  2. Utilisation du package DBMS_SQL avec des collections
    Par f-demu01 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 27/10/2008, 14h57
  3. [PEAR][MDB2] Package MDB2 de PEAR, avec PSQL
    Par kergad dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 21/04/2008, 23h31
  4. Prob avec dates delphi
    Par ericmart dans le forum ASP
    Réponses: 6
    Dernier message: 20/10/2003, 17h51
  5. Thread probs avec WaitFor()
    Par pixelrock dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/11/2002, 09h40

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