package Rectangle; use strict; use warnings; use Polygon; our @ISA = ('Polygon'); #Rectangles take two lengths sub new { my $class=shift; my ($len, $wid) = @_; my $obj = $class->SUPER::new(($len, $wid) x 2); bless $obj, $class; } #accessors sub length { my $obj = shift; my $length = shift; if (defined $length){ @{$obj}[0,2] = ($length) x 2; } return $obj->[0]; } sub width { my $obj = shift; my $width = shift; if (defined $width){ @{$obj}[1,3] = ($width) x 2; } return $obj->[1]; } sub area { my $obj = shift; return $obj->length() * $obj->width(); } package Square; use strict; use warnings; our @ISA = ('Rectangle'); sub new { my $class = shift; my $length = shift; my $obj = $class->SUPER::new(($length) x 2); bless $obj, $class; } sub length { my $obj = shift; my $length = shift; if (defined $length){ @{$obj} = ($length) x 4; } return $obj->[0]; } sub area { my $obj = shift; return $obj->length() ** 2; } 1;