1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
package Library::OReilly;
use Class::Std;
{
my %book; # Not an attribute hash; shared storage for class
sub add_book {
my ($class, $title, $arg_ref) = @_;
$book{$title} = { Publisher=>q{O'Reilly}, %{$arg_ref} };
}
# Book titles accumulate throughout the libraries...
sub titles :CUMULATIVE {
return map { "$_ (O'Reilly)"} keys %book;
}
}
package Library::Manning;
use Class::Std;
{
my %book; # Not an attribute hash; shared storage for class
sub add_book {
my ($class, $title, $arg_ref) = @_;
$book{$title} = { Publisher=>q{Manning}, %{$arg_ref} };
}
# Book titles accumulate throughout the libraries...
sub titles :CUMULATIVE {
return map { "$_ (Manning)"} keys %book;
}
}
package Library::All;
use base qw( Library::OReilly Library::Manning);
package main;
Library::OReilly->add_book(
'Programming Perl' => { ISBN=>596000278, year=>2000 }
);
Library::Manning->add_book(
'Object Oriented Perl' => { ISBN=>1884777791, year=>2000 }
);
print join "\n", Library::All->titles();
|