Hi!
Sorry if I double post, but the maillserver seems to have something against
perl scripts attachements, so my first email was droped by the MTA : /
Maybe if I put the code inline will be ok

In the attached script I implement two packages:
Package1 and Package2.

Package2 is derived from Package1, which I guess I dont well.
Now Package1 has a method called IncErr which increments a variable named $err.

If I call something like:

$a = Package1::new();
$a->IncErr();
print "ERR1: $a->{err}\n"; # should print 1

all goes well, but if I call something like:

$a = Package1::new();
$a->Package2->Create(); # this should call IncErr too
print "ERR1: $a->{err}\n"; # should print 1
doent't work as I expected.

Is there something wrong with the way I `bless`-ed the class Package2 ?



------>8-----------
#! /usr/bin/perl
package Package1 ;
sub new {
   my ($class) = @_;
   $class  = __PACKAGE__ ;

   print "Call new [".$class."]\n" ;
   $r      = [];
   $this   = {};
   $class->{err} = 0 ;

   $r->[0] = Package2::new($this->{sock_fd} );

   bless $this, $class;
   return $this ;
}

sub IncErr {
   my $this = shift ;
   $this->{err} += 1 ;
}

sub Package2 {
   my $this = shift ;
   @_ ? ($r->[0] = shift) : $r->[0];
}






package Package2 ;
@ISA = ("Package1");
sub new {
   my ( $this, $sock ) = @_ ;
   $class = __PACKAGE__ unless @_;
   $this->{sock_fd}    = $sock ;
   bless $this;
   return $this ;
}

sub Create {
   my $this = shift;
   print "Call Create\n" ;
   print "ERR2: $this->{err} ( this should print 2 )\n" ;
   $this->IncErr() ;
   print "ERR2: $this->{err} ( this should print 3 )\n" ;
}

my $a = Package1::new();
$a->IncErr();
$a->IncErr();
$a->Package2->Create();
print "ERR1: $a->{err} ( this should print 3 )\n" ;

------------------->8--------------------

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to