package Quote;
use strict;
use warnings;
use Data::Dumper;
use Carp qw/clue cluck/;
my (%phrase, %author, %approved);
sub new {
my ($class, $args) = @_;
my $self;
$self = bless \$self, ref $class || $class;
if (ref $args eq "HASH") {
$self->phrase() = $args->{phrase} if exists $args->{phrase};
$self->author() = $args->{author} if exists $args->{author};
$self->is_approved() = $args->{approved} if exists $args->{approved};
}
clue "$self";
$self;
}
sub phrase : lvalue { $phrase{shift}; }
sub author : lvalue { $author{shift}; }
sub is_approved : lvalue { $approved{shift}; }
sub DESTROY {
my $self = shift;
delete $phrase{$self};
delete $author{$self};
delete $approved{$self};
}
1;
####
package QuotePlus;
use Quote;
@ISA = qw/Quote/;
use strict;
use warnings;
use Data::Dumper;
use Carp qw/clue/;
my(%date);
sub new {
my ($class, $args) = @_;
my $self = new Quote( $args );
$self = bless \$self, ref $class || $class;
clue "$self";
if (ref $args eq "HASH") {
$self->date() = $args->{date} if exists $args->{date};
clue $self->date();
}
return $self;
}
sub date : lvalue { $date{shift}; }
sub DESTROY {
clue "@_";
my $self = shift;
delete $date{$self};
#$self->SUPER::DESTROY();
}
1;
##
##
#! perl -slw
use strict;
use Data::Dumper;
use Carp qw/clue/;
use QuotePlus;
$::debug = 0;
my $quote = new QuotePlus ({
phrase=>"It's a good day to die!",
author=>"Kahless",
approved=>1,
date=>"25530",
});
printf "%8s said: '%s'; circa. %.f\n",
$quote->author(),
$quote->phrase(),
$quote->date();
$quote->date() = 2500;
$quote->author() = "Kahless is reputed to have";
printf "%8s said: '%s'; circa. %.f\n",
$quote->author(),
$quote->phrase(),
$quote->date();
my @quotes;
while () {
chomp;
my ($when, $who, $what) = split/\t/;
clue "$when, $who, $what";
push @quotes, new QuotePlus ({
phrase=>$what,
author=>$who,
approved=>1,
date=>$when,
});
clue $quotes[-1];
}
close DATA;
my $i=0;
for my $quote (@quotes) {
clue $quote;
next unless $quote->is_approved;
printf "Quote %2d - %8s said: '%s'; circa. %.f\n",
$i++,
$quote->author(),
$quote->phrase(),
$quote->date();
}
printf "%8s said: '%s'; circa. %.f\n",
$quote->author(),
$quote->phrase(),
$quote->date();
__DATA__
26584.2 Kahless It's a good day to die!
26593.7 Kahless May your blood scream.
26601.1 Kahless May your enemies run with fear.
26603.2 Kahless Celebrate!? Tomorrow we may die!
26611.4 Kahless May you die before you are captured.
26653.9 Kahless May you always find a Bloodworm in your glass.
26658.3 Kahless May your co-ordinants be free of Tribbles.
26671.2 Kahless May you die in battle.
26671.3 Kahless May you die well.
26777.7 Kahless May you endure the pain.
26821.2 Kahless Klingons forever!
26822.1 Kahless We are KLINGONS!
26888.2 Kahless Qapla`!
##
##
C:\test>quote
Kahless said: 'It's a good day to die!'; circa. 25530
Kahless is reputed to have said: 'It's a good day to die!'; circa. 2500
Quote 0 - Kahless said: 'Qapla`!'; circa. 26888
Quote 1 - Kahless said: 'Qapla`!'; circa. 26888
Quote 2 - Kahless said: 'Qapla`!'; circa. 26888
Quote 3 - Kahless said: 'Qapla`!'; circa. 26888
Quote 4 - Kahless said: 'Qapla`!'; circa. 26888
Quote 5 - Kahless said: 'Qapla`!'; circa. 26888
Quote 6 - Kahless said: 'Qapla`!'; circa. 26888
Quote 7 - Kahless said: 'Qapla`!'; circa. 26888
Quote 8 - Kahless said: 'Qapla`!'; circa. 26888
Quote 9 - Kahless said: 'Qapla`!'; circa. 26888
Quote 10 - Kahless said: 'Qapla`!'; circa. 26888
Quote 11 - Kahless said: 'Qapla`!'; circa. 26888
Quote 12 - Kahless said: 'Qapla`!'; circa. 26888
Kahless said: 'Qapla`!'; circa. 26888
C:\test>