new & bless - Perl - Programmation
Marsh Posté le 07-01-2005 à 18:24:54
Mon pb principale est que si je fais en PERL
use toto;
my $a = toto->new(4);
my $b = toto->new(5);
$a->print_i();
$b->print_i();
# Dans les deux cas j'aurai la valeur 5 de b d'affiché
Marsh Posté le 10-01-2005 à 11:21:24
Mandracke76 a écrit : Je cherche a creer une class par la fonction new ou j'initialise des attribut de ma classe. comment dois je m'y prendre en perl pour faire le meme equivalent quen C++ ci-dessous |
J'ai trouvé un exemple qui explique tout: L'instruction bless permet d'associé une table de hachage à l'objet propre créé. Après il suffit de lui associer nos variables comme dans l'exemple ci-dessous:
--- EXEMPLE ----
Fichier Bug.pm
package Bug;
sub new
{
my $class = $_[0];
my $objref = {
id => $_[1],
type => $_[2],
descr => $_[3],
};
bless $objref, $class;
return $objref;
}
sub print_me
{
my ($self) = @_;
print "ID: $self->{id}\n";
print "$self->{descr}\n";
print "(Note: problem is fatal)\n" if $self->{type} eq "fatal";
}
...
1;
Fichier test.pl
use Bug;
sub main
{
...
my $nextbug = Bug->new($id, $type, $description);
...
$nextbug->print_me();
...
return 0;
}
&main;
Pour plus de detail voici le lien où j'ai trouvé l'exemple (attention en anglais )
http://www.perl.com/pub/a/1999/09/refererents.html
Marsh Posté le 07-01-2005 à 16:34:47
Je cherche a creer une class par la fonction new ou j'initialise des attribut de ma classe. comment dois je m'y prendre en perl pour faire le meme equivalent quen C++ ci-dessous
C++:
class toto
{
int i;
toto(int j) { i = j;}
void print_i() { printf("%i\n",i);}
};
PERL ???:
package toto;
my $i;
sub new{
my $class = shift;
my $self = {};
bless $self, $class; # bless $self into the designated class
$self->_init(@_);
return $self;
}
sub _init{
shift;
$i = shift;
}
sub print_i{
}
Message édité par mandracke76 le 10-01-2005 à 11:24:06