http://qs1969.pair.com?node_id=176963

Basilides has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm having trouble using SUPER to call an ancestor's constructor. Say i've got an abstract class, Word, and a subclass, Noun, which derives from it, and calls it's parent's constructor, but then takes a few extra parameters. The only way I can get it to work is to create and bless my $self and then call SUPER:
#!/usr/bin/perl -w use strict; package Word; sub new { my $classname = shift; my $self = {}; $self->{stem} = shift; $self->{english} = shift; bless $self, $classname; return $self; } package Noun; our @ISA = "Word"; sub new { my $classname = shift; my $self = {}; bless $self, $classname; $self = $self->SUPER::new(shift, shift); $self->{gender} = shift; $self->{nom_sg} = shift; $self->{gen_sg} = shift; return $self; } package main; my $w = new Noun("ai(=m-", "blood", "n", "a", "atos"); print $w->{english};
This seems very clunky & makes me think it's hardly worth setting up the inheritance. But I know that in Java you can do it in one line, so I bet you can in Perl too? Can anyone suggest an optimised version of the above?