package File_Entry { (has 3 routines, constructor & accessors):
sub new([name,[rating]]);
filename([name])
rating([rating])
}
package File_Entries {
use fields qw(__entries);
####
our $pckg_vars = __PACKAGE__;
sub new () {
my $class=$_[0];
my $s = {}; # base class starts/nothing
$s->{$pckg_vars} = {};
bless $s, ref($class) || $class;
$s->_entries_init;
return $s;
}
sub ratings ([index,[rating]) #r/w accessor
sub filenames([index]) #r/o accessor
sub _add_entry(\$) #adds entry of type File_Entry
####
package Class2;
our $pckg_vars = __PACKAGE__;
sub new(){
my $class=$_[0];
my $s = "Base"->new(params)....
my $s->{$pckg_vars} = {}; #'local' class var space
bless $s,$class;
return $s;
...}
package Class3;
our $pckg_vars => __PACKAGE__;
sub new(){
my $class=shift;
my $s = Class2->new(params)...
my $s->{$pckg_vars} = {}; #class3 local vars
bless $s,$class;
return $s;
....}
####
{
package Entry_Display_In_Wins;
use strict;
our @ISA = qw(Entry_Ordering GUI_Glue);
use base qw(Entry_Ordering); # and GUI_Glue, but base deficient
use fields qw( __width __height __timer__ticked __timer__enabled);
... but then I get to "new"
sub new($) ...
my ($class,$args) = @_;
my $s= PreviousClass->new($args);
confess "Fatal: memory for object $pckg_vars " .
"busy (in use by someone else).\n"
if (defined $s->{$pckg_vars});
$s->{$pckg_vars} = {};
bless $s, $class;
...
$s->{$pckg_vars}->{'__GUI_Glue'}= GUI_Glue->new(...);
return $s;