in reply to Inheritance - calling parent constructor
package Child; use base qw(Parent); sub new { my ($class, $arg1, $arg2, $arg3) = @_; #my $self = SUPER->new($arg1, $arg2); my $self = $class->SUPER::new($arg1, $arg2); #$self->{arg3} => $arg3; $self->{arg3} = $arg3; #bless $self, $class; return $self; } return 1;
You do need to explicitly invoke the SUPER class, since you are overriding the local new method, and Perl does not a priori know what you've decided to call your constructor. If you were to just say "new", it would call the constructor recursively.
Regarding your second question, as documented in base, use base 'Parent'; will perform the functions intended by the use Exporter;... code, though not following the explicitly same approaches.
Update: Should have tested before posting. Corrected code above (left original commmented) and fixed an OP typo for argument assignment.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Inheritance - calling parent constructor
by ikegami (Patriarch) on Dec 29, 2009 at 18:17 UTC | |
by bob_dobalina (Sexton) on Dec 29, 2009 at 19:13 UTC | |
by ikegami (Patriarch) on Dec 29, 2009 at 22:55 UTC | |
by JavaFan (Canon) on Dec 29, 2009 at 23:33 UTC | |
by ikegami (Patriarch) on Dec 30, 2009 at 00:51 UTC | |
| |
|
Re^2: Inheritance - calling parent constructor
by bob_dobalina (Sexton) on Dec 29, 2009 at 18:42 UTC | |
by kennethk (Abbot) on Dec 29, 2009 at 18:52 UTC | |
by ikegami (Patriarch) on Dec 29, 2009 at 23:13 UTC |