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 :

petit probleme reference


Sujet :

Langage Perl

  1. #1
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut petit probleme reference
    Bonjour,

    Comme vous allez le constater je debute en perl, et je me retrouve avec un petit probleme de reference ou quelque chose dans le genre
    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
     
    		while($i<=$#tmp) {
    		    $t = go::modules::Term->new($tmp[$i]);
    		    print $t;
    		    push @term, $t;
    		    $i++;
    		}
     
     
    		$session->param('term', \@term);
     
    	    	$file = 'choose_view.tmpl';
    		$vars = {
    			'tabTerm' => \@term,
    			'idSession' => $sid,
    		};
    Voila une premiere partie de mon code. Le print $t qui est en fait un objet m'affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    go::modules::Term=HASH(0x9e6d414)
    Maintenant dans un autre script si je rappelle cet objet se trouvant dans ma session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	    my $allT = $session->param('term');
    		    foreach $t (@{$allT}) {
    			print $t;
    		    }
    ce print $t devrait m afficher la mm chose or cela n'est pas le cas :
    go::modules::Term=HASH(0x9ff2648)

    Cela n'est pas la meme reference de ce fait je ne peux pas recuperer le bon objet.

    Merci pour vos explications

    Edité par GLDavid. Merci de penser à mettre les balises codes

  2. #2
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Je reviens sur mon message il semble que personne n'ait de reponse. J'aimerais savoir alors si quelqu'un à dèja passe en parametre d'une session des tableaux? Si oui s'il pouvait m'en dire plus (du code, etc ..., )
    Autre question mes sessions ont comme groupe et comme proprietaire Apache, je voudrais savoir si cela ne pose pas de probleme?

    Merci

  3. #3
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par bfb
    Je reviens sur mon message il semble que personne n'ait de reponse.
    Je suis désolé. Je te remercie de ne pas avoir posté 2Mo de code en disant que ça marche pas, mais là c'set un peu trop succincte et je ne vois pas le problème. Dans un autre script, tu n'auras pas les mêmes hyroglyphes hexa, c'est normal.

    Mais ça se trouve que de toute façon, les objets sont identiques. Peut-être un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    use Data::Dumper;
    print Dumper($t),"\n";
    permettra d'y voir plus clair

    N

  4. #4
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Merci pour ta reponse.

    Et en effet c'est bien le meme objet. Avec l'aide de dumper j'obtiens le resultat suivant :

    $VAR1 = bless( { 'go::modules::GeneProduct::__fullName' => 'Cdc14-related protein phosphatase', 'go::modules::GeneProduct::__dbName' => 'PMID', 'go::modules::GeneProduct::__symbol' => 'flp1', 'go::modules::GeneProduct::__id' => 23287, 'go::modules::GeneProduct::__evidence' => 'TAS' }, 'go::modules::GeneProduct' );

    Ce qui montre que je recupere mon objet. Le probleme est que si je fais appel a la fonction id() sur cet objet il ne me retourne rien et l'execution s'arrete. Je ne comprend pas car il semble que l'objet est bon et la fonction id est tres simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #list of getters
    sub id {
            return $_[0]->{$id};
    }

    Sinon c'est une simple classe :

    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
     
    # CLASS CONSTANTS
    my $id = $PACKAGE.'::__id';
    my $symbol = $PACKAGE.'::__symbol';
    my $fullName = $PACKAGE.'::__fullName';
    my $evidence = $PACKAGE.'::__evidence';
    my $dbName = $PACKAGE.'::__dbName';
    my $type = $PACKAGE.'::__type';
    my $termAssociated = $PACKAGE.'::__termAssociated';
     
     
    #Constructeur de la classe GeneProduct, on peut creer un nouvel objet GeneProduct à partir d'un go id
    #########################################################################
    sub new {
    #########################################################################
     
     
        my ($self, $idG, $symb, $name, $evid, $dbN) = @_;
     
        my $class = shift;
        $self = {};
        bless $self, $class;
        $self->{$id}=$idG;
        $self->{$symbol}=$symb;
        $self->{$fullName}=$name;
        $self->{$evidence}=$evid;
        $self->{$dbName}=$dbN;
     
        return $self;
    }
    et j'ai des accesseurssur chaque attribut.

    Si quelqu'un a une piste je suis preneur.

    Merci par avance

  5. #5
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par bfb
    Merci pour ta reponse.

    Et en effet c'est bien le meme objet. Avec l'aide de dumper j'obtiens le resultat suivant :

    $VAR1 = bless( { 'go::modules::GeneProduct::__fullName' => 'Cdc14-related protein phosphatase', 'go::modules::GeneProduct::__dbName' => 'PMID', 'go::modules::GeneProduct::__symbol' => 'flp1', 'go::modules::GeneProduct::__id' => 23287, 'go::modules::GeneProduct::__evidence' => 'TAS' }, 'go::modules::GeneProduct' );

    Ce qui montre que je recupere mon objet. Le probleme est que si je fais appel a la fonction id() sur cet objet il ne me retourne rien et l'execution s'arrete. Je ne comprend pas car il semble que l'objet est bon et la fonction id est tres simple :



    [...]

    et j'ai des accesseurssur chaque attribut.

    Si quelqu'un a une piste je suis preneur.

    Merci par avance
    Je lis en diagonale, mais je crois que tu veux quelque chose comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    #list of getters
    sub id {
            return $_[0]->{__id};
    }
    au lieu d'une variable. Tu devrais laisser tomber la notion de class contants, car tu fermes la porte à la possibilité de faire de l'héritage de la classe par la suite.

    N

  6. #6
    bfb
    bfb est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 44
    Points : 28
    Points
    28
    Par défaut
    Ok nematoad, je te remercie pour ton aide. Le probleme c'est que j'ai toujours un probleme.

    L'erreur que j'obtiens maintenant est la suivante :

    tCan't locate object method "id" via package "go::modules::GeneProduct"

    Cette erreur je l'ai deja rencontre, je sais ce qu'elle signifie. Le probleme c'est que cette methode est bien definie dans ma classe. De plus, je fais un appel a cette methode dans le meme module sur un objet geneProduct et cela fonctionne. La seule difference vient du fait que je recupere mon objet par le resultat d'une fonction. Or dans le cas ou cela ne fonctionne pas, je le recupere par ma session.

    Je suis sur de manquer quelque chose d evident mais je tourne autour du probleme depuis un moment et je dois passer à cote de quelque chose.

    Merci pour l'aide et pour d'eventuelles idees

  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
    Je ne suis pas sûr de bien comprendre : tu essaies de faire passer un objet d'un script CGI à un autre ??
    Dans ce cas ta méthode est mauvaise, il est bien évident que ton objet a été libéré par Perl à la fin du premier script...
    Pour faire ça, tu peux probablement utiliser mod_perl avec Apache pour faire passer tes variables d'un script à un autre (car ils partagent en fait le même interpréteur). Sinon, si tu dois te contenter de CGI simple, il faut plutôt que tu stockes les données de ton objet dans un fichier temporaire (dont tu peux faire passer effectivement le nom d'un script à l'autre).

    Si j'ai rien compris au problème, c'est que c'était probablement pas assez clair.

    --
    Jedaï

Discussions similaires

  1. Petit problème de fork
    Par osmose22 dans le forum Linux
    Réponses: 7
    Dernier message: 18/03/2007, 21h10
  2. [TP]petit probleme avec solution
    Par pompompolom dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 02/12/2004, 19h48
  3. petit probleme avec l'éditeur de builder
    Par qZheneton dans le forum C++Builder
    Réponses: 2
    Dernier message: 28/10/2004, 16h19
  4. petit probleme de requete
    Par nico33307 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 25/08/2004, 11h36
  5. petit probleme dans une requte POSTGRE SQL
    Par ghis le fou dans le forum Requêtes
    Réponses: 5
    Dernier message: 08/09/2003, 13h51

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