Perl objet : comment récupérer les valeurs de variables d'instances ??
4 réponses
Damien GUERIN
Bonjour,
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une
variable d'instance d'une librairie Perl dans laquelle il n'y a pas
d'accesseurs pour ces variables.
Je dois donc récupérer la valeur d'une variable sans modifier la librairie.
La librairie est la suivante, je cherche à récupérer la valeur de la
variable "a" sur un objet "$objet" correctement instancié dans mon script
perl.
J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est
possible !
Merci par avance pour votre aide.
package my_package;
use strict;
use base qw( my_parent_package);
use fields qw(a b c d);
use vars qw[ $VERSION ];
$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (\d+)\.(\d+)/;
1;
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
my %p = @_;
my $self = $class->SUPER::new(%p);
$self->{a} = $p{a};
$self->{b} = $p{b};
$self->{c} = $p{c};
$self->{d} = $p{d};
return $self;
}
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
DominiX
ici même: Damien GUERIN a écrit
Bonjour,
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables. Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible ! Merci par avance pour votre aide.
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
bon, il manque pas mal de chose pour investiguer cette question mais une piste -> Data::Dumper est ton ami.
-- dominix
ici même: Damien GUERIN <damien.guerin2@wanadoo.fr> a écrit
Bonjour,
j'ai un script perl et je cherche le moyen de récupérer les valeurs
d'une variable d'instance d'une librairie Perl dans laquelle il n'y a
pas d'accesseurs pour ces variables.
Je dois donc récupérer la valeur d'une variable sans modifier la
librairie. La librairie est la suivante, je cherche à récupérer la
valeur de la variable "a" sur un objet "$objet" correctement
instancié dans mon script perl.
J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si
c'est possible !
Merci par avance pour votre aide.
package my_package;
use strict;
use base qw( my_parent_package);
use fields qw(a b c d);
use vars qw[ $VERSION ];
$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/;
1;
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
my %p = @_;
my $self = $class->SUPER::new(%p);
$self->{a} = $p{a};
$self->{b} = $p{b};
$self->{c} = $p{c};
$self->{d} = $p{d};
return $self;
}
bon, il manque pas mal de chose pour investiguer cette question
mais une piste -> Data::Dumper est ton ami.
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables. Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible ! Merci par avance pour votre aide.
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
bon, il manque pas mal de chose pour investiguer cette question mais une piste -> Data::Dumper est ton ami.
-- dominix
Paul Gaborit
À (at) Thu, 4 Nov 2004 20:19:17 +0100, "Damien GUERIN" écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields' utilise une référence à une table de hachage :
my $obj = my_package->new(a => 123); print "$obj->{a}n"; # ça marche
Si la classe récalcitrante est 'my_parent_package' alors utilisez Data::Dumper pour savoir ce que contient $self après l'appel SUPER.
À (at) Thu, 4 Nov 2004 20:19:17 +0100,
"Damien GUERIN" <damien.guerin2@wanadoo.fr> écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une
variable d'instance d'une librairie Perl dans laquelle il n'y a pas
d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a pas
d'accesseur, comment savez-vous qu'il existe ?
Je dois donc récupérer la valeur d'une variable sans modifier la librairie.
La librairie est la suivante, je cherche à récupérer la valeur de la
variable "a" sur un objet "$objet" correctement instancié dans mon script
perl.
J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est
possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet de
savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper;
use LaClasse;
my $objet = LaClasse->new();
print Dumper($objet);
package my_package;
use strict;
use base qw( my_parent_package);
use fields qw(a b c d);
use vars qw[ $VERSION ];
$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/;
1;
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
my %p = @_;
my $self = $class->SUPER::new(%p);
$self->{a} = $p{a};
$self->{b} = $p{b};
$self->{c} = $p{c};
$self->{d} = $p{d};
return $self;
}
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields' utilise
une référence à une table de hachage :
my $obj = my_package->new(a => 123);
print "$obj->{a}n"; # ça marche
Si la classe récalcitrante est 'my_parent_package' alors utilisez Data::Dumper
pour savoir ce que contient $self après l'appel SUPER.
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Thu, 4 Nov 2004 20:19:17 +0100, "Damien GUERIN" écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields' utilise une référence à une table de hachage :
my $obj = my_package->new(a => 123); print "$obj->{a}n"; # ça marche
Si la classe récalcitrante est 'my_parent_package' alors utilisez Data::Dumper pour savoir ce que contient $self après l'appel SUPER.
À (at) Thu, 4 Nov 2004 20:19:17 +0100, "Damien GUERIN" écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une nouvelle instance car les attributs à passer en paramètre me sont inconnus. Je peux donc seulement faire Dumper($objet). Ce que j'ai fait et qui marche c'est la chose suivante : my $dumper=Dumper($objet); $dumper =~ /"a" => "(.*)"/; my $a = $1; Je sais,'est un peu de la bidoule, mais ça a le mérite de fonctionner !
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields' utilise une référence à une table de hachage :
my $obj = my_package->new(a => 123); print "$obj->{a}n"; # ça marche
Le problème est que je ne peux pas faire de new... et si je fais seulement $obj->{a}, ça ne fonctionne pas !
Si la classe récalcitrante est 'my_parent_package' alors utilisez Data::Dumper pour savoir ce que contient $self après l'appel SUPER.
À (at) Thu, 4 Nov 2004 20:19:17 +0100,
"Damien GUERIN" <damien.guerin2@wanadoo.fr> écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une
variable d'instance d'une librairie Perl dans laquelle il n'y a pas
d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a
pas
d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Je dois donc récupérer la valeur d'une variable sans modifier la
librairie.
La librairie est la suivante, je cherche à récupérer la valeur de la
variable "a" sur un objet "$objet" correctement instancié dans mon script
perl.
J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si
c'est
possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet
de
savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper;
use LaClasse;
my $objet = LaClasse->new();
print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une
nouvelle instance car les attributs à passer en paramètre me sont inconnus.
Je peux donc seulement faire Dumper($objet).
Ce que j'ai fait et qui marche c'est la chose suivante :
my $dumper=Dumper($objet);
$dumper =~ /"a" => "(.*)"/;
my $a = $1;
Je sais,'est un peu de la bidoule, mais ça a le mérite de fonctionner !
package my_package;
use strict;
use base qw( my_parent_package);
use fields qw(a b c d);
use vars qw[ $VERSION ];
$VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/;
1;
sub new
{
my $proto = shift;
my $class = ref $proto || $proto;
my %p = @_;
my $self = $class->SUPER::new(%p);
$self->{a} = $p{a};
$self->{b} = $p{b};
$self->{c} = $p{c};
$self->{d} = $p{d};
return $self;
}
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields'
utilise
une référence à une table de hachage :
my $obj = my_package->new(a => 123);
print "$obj->{a}n"; # ça marche
Le problème est que je ne peux pas faire de new... et si je fais seulement
$obj->{a}, ça ne fonctionne pas !
Si la classe récalcitrante est 'my_parent_package' alors utilisez
Data::Dumper
pour savoir ce que contient $self après l'appel SUPER.
Merci...
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Thu, 4 Nov 2004 20:19:17 +0100, "Damien GUERIN" écrivait (wrote):
j'ai un script perl et je cherche le moyen de récupérer les valeurs d'une variable d'instance d'une librairie Perl dans laquelle il n'y a pas d'accesseurs pour ces variables.
En général, pour des objets, on parle d'attribut... Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Je dois donc récupérer la valeur d'une variable sans modifier la librairie. La librairie est la suivante, je cherche à récupérer la valeur de la variable "a" sur un objet "$objet" correctement instancié dans mon script perl. J'ai essayé :$objet->{a}, $objet->{"a"},... Bref, je sais meme pas si c'est possible !
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une nouvelle instance car les attributs à passer en paramètre me sont inconnus. Je peux donc seulement faire Dumper($objet). Ce que j'ai fait et qui marche c'est la chose suivante : my $dumper=Dumper($objet); $dumper =~ /"a" => "(.*)"/; my $a = $1; Je sais,'est un peu de la bidoule, mais ça a le mérite de fonctionner !
package my_package; use strict; use base qw( my_parent_package); use fields qw(a b c d); use vars qw[ $VERSION ]; $VERSION = sprintf "%d.%02d", q$Revision: 1.4 $ =~ /: (d+).(d+)/; 1;
sub new { my $proto = shift; my $class = ref $proto || $proto; my %p = @_; my $self = $class->SUPER::new(%p); $self->{a} = $p{a}; $self->{b} = $p{b}; $self->{c} = $p{c}; $self->{d} = $p{d}; return $self; }
Si la classe récalcitrante s'appelle 'my_package', l'usage de 'fields' utilise une référence à une table de hachage :
my $obj = my_package->new(a => 123); print "$obj->{a}n"; # ça marche
Le problème est que je ne peux pas faire de new... et si je fais seulement $obj->{a}, ça ne fonctionne pas !
Si la classe récalcitrante est 'my_parent_package' alors utilisez Data::Dumper pour savoir ce que contient $self après l'appel SUPER.
À (at) Sat, 6 Nov 2004 18:58:51 +0100, "Damien GUERIN" écrivait (wrote):
Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Si vous avez accès au code, vous devirez pouvoir en déduire comment accèder à cet attribut.
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une nouvelle instance car les attributs à passer en paramètre me sont inconnus. Je peux donc seulement faire Dumper($objet). Ce que j'ai fait et qui marche c'est la chose suivante : my $dumper=Dumper($objet);
Affichez $dumper et envoyez-nous le résultat. Nous pourrons alors vous dire comment récupérer cette valeur sans passer par Dumper.
À (at) Sat, 6 Nov 2004 18:58:51 +0100,
"Damien GUERIN" <damien.guerin2@wanadoo.fr> écrivait (wrote):
Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Si vous avez accès au code, vous devirez pouvoir en déduire comment accèder à
cet attribut.
Seul la connaissance de l'implémentation d'un objet de cette classe permet
de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper;
use LaClasse;
my $objet = LaClasse->new();
print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une
nouvelle instance car les attributs à passer en paramètre me sont inconnus.
Je peux donc seulement faire Dumper($objet).
Ce que j'ai fait et qui marche c'est la chose suivante :
my $dumper=Dumper($objet);
Affichez $dumper et envoyez-nous le résultat. Nous pourrons alors vous dire
comment récupérer cette valeur sans passer par Dumper.
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) Sat, 6 Nov 2004 18:58:51 +0100, "Damien GUERIN" écrivait (wrote):
Si cet attribut n'a pas d'accesseur, comment savez-vous qu'il existe ?
Je sais qu'il exite car j'ai regardé le code de la librairie...
Si vous avez accès au code, vous devirez pouvoir en déduire comment accèder à cet attribut.
Seul la connaissance de l'implémentation d'un objet de cette classe permet de savoir comment accéder à cet éventuel attribut.
Dans ce cas, Data::Dumper peut aider :
use Data::Dumper; use LaClasse;
my $objet = LaClasse->new(); print Dumper($objet);
Le problème est que l'objet est déjà instancié, je ne peux pas créer une nouvelle instance car les attributs à passer en paramètre me sont inconnus. Je peux donc seulement faire Dumper($objet). Ce que j'ai fait et qui marche c'est la chose suivante : my $dumper=Dumper($objet);
Affichez $dumper et envoyez-nous le résultat. Nous pourrons alors vous dire comment récupérer cette valeur sans passer par Dumper.