#!/usr/bin/perl use strict; { package person; #basic person sub new { my ($class, $name) = @_; my $self = { 'name' => $name }; bless $self, $class; return $self; } sub tellName { my ($self) = $_[0]; return $self->{'name'}; } sub introduce { my ($self) = $_[0]; print "Hello, I'm ", $self->tellName(), "\n"; } } { package child; #person + ability to know parents our @ISA = qw(person); # inherits from person sub new { my ($class, $name, $mom, $dad) = @_; my $self = $class->SUPER::new($name); $self->{mom} = $mom; $self->{dad} = $dad; bless $self, $class; return $self; } sub introduce { my($self)=$_[0]; $self->SUPER::introduce(); for (qw/mom dad/) { if ($self->{$_}) { print "Here's my $_: ", $self->{$_}->tellName(); } } } } package main; my $mom = new person("Alice"); $mom->introduce(); # that time it works. print "\n"; my $son = new child("Fred", $mom); $son->introduce();