in reply to overridden and inheritance

Not sure if this is a useful answer, however you seem to be struggling with overriding methods so consider:

# file noname1.pm: use strict; use warnings; package Hello; sub new { my $type = shift; # Call as: Hello->new (); my $class = ref $type || $type; return bless {}, $class; } sub hi { my ($self, $tail) = @_; $tail ||= ''; return 'Hello' . $tail; } 1; package World; use noname1; use base qw(Hello); sub new { my $type = shift; # Call as: World->new (); my $class = ref $type || $type; return Hello::new ($class); } sub hi { my ($self, $tail) = @_; $tail ||= ''; # Now call up to get base class work done return $self->Hello::hi (' World' . $tail); } 1; #file noname.pl: use strict; use warnings; use noname1; my $hi = World->new (); # Create derived class object print $hi->hi ('. How goes it?'); # Call method on derived class objec +t

Prints:

Hello World. How goes it?

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^2: overridden and inheritance
by chromatic (Archbishop) on Aug 22, 2007 at 05:15 UTC
    my $class = ref $type || $type;

    Nix that; you don't need it.

    sub new { my $type = shift; # Call as: World->new (); my $class = ref $type || $type; return Hello::new ($class); }

    You don't need that either. Just delete the whole thing.

    # Now call up to get base class work done return $self->Hello::hi (' World' . $tail);

    This is a lot better as:

    return $self->SUPER::hi( ' World' . $tail );

    ... or even:

    use SUPER; # ... return $self->SUPER( ' World' . $tail );
Re^2: overridden and inheritance
by wst (Acolyte) on Aug 22, 2007 at 13:34 UTC
    This is helpful and thanks for the example!!. and yes that's what I was running into problem and understanding.
    Thanks all!! it has been very helpful.