Forum Programmation.perl CGI::Session: Probleme de relecture de donnee avec Data::Dumper

Posté par  (site web personnel) .
Étiquettes : aucune
0
31
oct.
2007
Hello,

J'ai un probleme lors de l'utilisation de CGI::Session, lorsque j'essaye de stocker un objet. Apres recherche, j'ai reussi a isoler le probleme.

J'ai une classe, de type Md, qui contient une methode param().
Lorsque je dump (data::Dumper) un objet de ce type, et que je restaure avec Safe (qui en gros fait un 'eval' dans un bac a sable), j'obtiens un objet du bon type, mais qui ne contient pas la methode param.

Voir le code suivant pour explication:


#!/usr/bin/perl

use strict;
use Data::Dumper;
use Safe;

package Md;
sub new {bless {'plop' => 'coin'}, $_[0]};
sub param {return $_[0]->{$_[1]};}

package main;

#Object and dump creation
my $md = Md->new();
my $dump = Dumper($md);

#'eval'ed dump
my $mde = eval($dump);
print defined $mde ? "Defined" : "undef"; # => print undef, bad


#'Safe' evaled dump
my $mdr = Safe->new->reval( $dump );
print defined $mdr ? "Defined" : "undef"; # => print defined, good

print $mdr->can('param') ? "yes" : "No"; # => print No. Why?


Quelqu'un pourrait m'expliquer comment ce fait-il qu'un objet de type Md ne peut pas executer les methodes de Md?

Notes:
J'ai bien vu qu'en utilisant $Data::Dumper::Terse ou sans 'use strict' il est possible de restaurer l'objet comme je le veux, mais vu que le probleme est cache dans CGI::Session, je ne peux pas utiliser ces methodes.


Merci pour vos reponses

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.