package Dragon;
use strict;
use Data::Dumper;
sub new() {
my $class = shift; # get class so constructor can be inherited
my $self = {};
bless ($self,$class);
$self->_init( @_ ); # call _init here or in subclass
$self->awaken; # arise!
return $self;
}
sub _init {
my $self = shift;
my %args = @_;
foreach my $key qw(NAME AGE COLOR) {
$self->{$key} = $args{$key};
}
}
sub get_name {
my $self = shift;
return $self->{NAME} || "nameless";
}
sub get_age {
my $self = shift;
return $self->{AGE} || "ageless";
}
sub get_color {
my $self = shift;
return $self->{COLOR} || "obscure";
}
sub awaken {
my $self = shift;
($self->get_name eq "nameless") ? print "A " : 0;
print $self->get_name .", ";
($self->get_name ne "nameless") ? print "the " : 0;
print $self->get_age .", ";
print $self->get_color ." dragon awakens from his slumber!\n";
}
1;
####
package Trogdor;
use strict;
use base qw(Dragon);
sub new {
my $class = shift;
$class->SUPER::new(
NAME => "Trogdor",
AGE => "one year old",
COLOR => "green",
@_, # allows us to override defaults
);
}
sub burninate {
my $self = shift;
print $self->get_name ." burninates the land!\n";
}
1;
####
#!/usr/bin/perl
use strict;
use Trogdor;
my $d = new Trogdor(); # create Trodgor
my $e = new Dragon(NAME => 'Smaug'); # create Smaug
my $f = new Dragon(); # create anonymous dragon
####
Using perl 5.8.1-RC3 unless otherwise noted.
Apache/1.3.33 (Darwin) unless otherwise noted.
Mac OS X 10.3.9 unless otherwise noted.