new & bless

new & bless - Perl - Programmation

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
Reply

Marsh Posté le 07-01-2005 à 16:34:47   

Reply

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é

Reply

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
 
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{
 
}


 
 
 :bounce:  :bounce:  :bounce:  :bounce:  :bounce:  
 
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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed