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.