package Library::OReilly;
use Class::Std;
{
my %book;
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();