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 :

[POO] recuperer une proprieté tableau (et non scalaire)


Sujet :

Langage Perl

  1. #1
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut [POO] recuperer une proprieté tableau (et non scalaire)
    Bonjour,
    Je cherche a comprendre le fonctionnement objet sous perl. J'arrive bien a recuperer les variables simples, mais pas les tableaux.

    J'ai une classe, qui a l'air de faire le travail demandé :

    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
     
    #fichier explore_bl2seq.pm
    package explore_bl2seq;
    use strict;
    sub explore
    {
    	my($class,$file)=@_;
    	my $this={};
    	bless($this,$class);
    	my @tab;
    	my $i;
    	for($i=0;$i<10;$i++)
    	{
    		push(@tab,($i*11));
     
    	}
    	#print @tab; #renvoie bien toutes les valeurs du tableau
    	$this->{FILEINI}=$file;
    	$this->{FILEMODIF}=$file."truc";
    	$this->{TABLEAU}=@tab;
    	return $this;
    }
    1;
    Et le script qui l'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #!/usr/bin/perl
    use strict;
    use explore_bl2seq;
    my $ficini;
    my $ficmodif;
    my @tableau;
    my $f;
    my $expl=explore_bl2seq->explore('fichier_blast');
    $ficini=$expl->{FILEINI};
    $ficmodif=$expl->{FILEMODIF};
    @tableau=$expl->{TABLEAU};
    print $ficini."\n".$ficmodif."\n"; #renvoie les valeurs attendues
    print @tableau; #renvoie...10 (???!!)
    Le probleme est que le script ne recupere pas le tableau, mais la valeur 10 (le nb d'elements du tableau) !

    Qu'est-ce que je fais mal ?

    Merci pour votre aide,
    Sohnic

  2. #2
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    mets plutôt ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->{TABLEAU}="@tab";

  3. #3
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Ben, ca j'aurais jamais trouvé toute seule !!
    Mille mercis, c'est exactement ce que je voulais !!
    Sohnic

  4. #4
    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
    Citation Envoyé par Mr6
    mets plutôt ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->{TABLEAU}="@tab";
    Pas vraiment... parce que là ça va bien se passer tant que tu veux l'afficher (avec print), mais si tu essaies de récupérer un élément du tableau en particulier, ça ne va pas marcher du tout : en effet avec cette affectation, tu transforme @tab en string avant d'affecter cette string à $this->{TABLEAU}, ensuite quand tu le récupère, tu ne récupère en fait qu'une simple string, @tableau n'a donc qu'un seul élément, cette string. Comme dans ton cas tu ne fait qu'afficher @tableau, tu ne t'en aperçois pas, mais le problème demeure et risque d'émerger si tu modifies ton script.

    La façon correcte de faire ça est d'utiliser des références sur @tab ("perldoc perlreftut" pour une explication pédagogique du concept et de la syntaxe afférente). Par ailleurs utiliser directement des accès hashs alors que tu utilises un objet pour abstraire ton code de l'implémentation n'est probablement pas une bonne idée... Si tu as vraiment la flemme de faire des getters/setters, tu peux utiliser des modules comme Class::Accessor qui le feront pour toi.

    --
    Jedaï

  5. #5
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Merci pour la subtilité ! Tu reponds du coup a mon interrogation : pourquoi le print @tab donne un resultat sans espaces si le print est dans la classe (vrai tableau) et avec espaces si le print est dans le script principal (donc une "vulgaire" chaine).

    Dans l'absolu, je peux redecouper la chaine, mais si j'ai fais un tableau, c'etait pour me servir... d'un tableau.

    Je vais donc regarder de plus pres les liens que tu me proposes. Je te tiens au courant.

    Encore merci,
    Sohnic

  6. #6
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Juste pour info, c'est tout à fait normal que le script retourne le nombre d'élément et non le tableau lui même.
    Je m'explique : en fait, c'est le module qui est mal définit : @tab est bien un tableau (on s'en serait pas douté ), si on l'affiche on affiche donc tous ces éléments. Mais le problème viens du fait qu'une table de hachage ne contient que des SCALAIRES ! L'affectation $this->{TABLEAU}=@tab; est donc évaluée en contexte scalaire, et @tab donc son nombre d'élément.

    Comment faire pour faire une table de hachage contenant des tableaux ? En utilisant les références, qui elles sont des scalaires.
    Dans le module, il aurait fallu écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->{TABLEAU}=\@tab; #stocke une référence vers le tableau
    Pour afficher les éléments de ce tableau, il suffit de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    my $reftab = $expl->{TABLEAU}; #stocke la référence vers le tableau
    print @$reftab;
    #déréférence $reftab : on accède donc au tableau

    Voilou, en éspérant ne pas avoir trop mal expliqué

  7. #7
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    Citation Envoyé par Jedai
    Citation Envoyé par Mr6
    mets plutôt ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->{TABLEAU}="@tab";
    Pas vraiment...
    Rôôôôôh !!!!! Honte à moi, j'ai vraiment pas les yeux en face des trous moi en ce moment... dsl de t'avoir trompé sur la marchandise sohnic

    @+
    Mr6

  8. #8
    Membre averti Avatar de sohnic
    Femme Profil pro
    bioinfo
    Inscrit en
    Mai 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : bioinfo

    Informations forums :
    Inscription : Mai 2003
    Messages : 426
    Points : 434
    Points
    434
    Par défaut
    Vous etes des as !!
    Effectivement, hier je me suis penchée sur les liens de Jedai et ca m'a rappelé quelques cauchemars (genre pointeurs en C), mais ca semblait etre la bonne voie. Mais j'ai eu du mal a comprendre.

    Et Woufeil est arrivé (tel Zorro), et tu peux etre rassuré, tu es un excellent professeur !

    quant a Mr6, ton idée n'est pas si mauvaise, bien que non appropriée dans mon cas. En tout cas, j'aurais fait avec faute de mieux et comme je l'ai dit precedemment, je n'en aurais pas eu l'idée moi-meme.

    Mille mercis a vous trois, vous m'avez, non seulement fait gagner du temps, mais appris de bien meilleure façon que tout tutorial comment passer ce type de propriétes.

    Sohnic

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

Discussions similaires

  1. recuperer une propriete au niveau parent
    Par sallemel dans le forum Struts 1
    Réponses: 0
    Dernier message: 04/02/2009, 16h29
  2. Réponses: 2
    Dernier message: 02/06/2006, 11h20
  3. [Tableau] récupérer une partie d'un tableau
    Par keyra dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 07/02/2006, 22h17
  4. [POO] [PHP 4.4.X] Nom d'une propriété de classe
    Par stailer dans le forum Langage
    Réponses: 8
    Dernier message: 11/12/2005, 23h02
  5. [net] recuperer les proprietes d'un File via une URL
    Par mma dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 06/05/2004, 12h45

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