#!/usr/bin/perl -w
### set up some packages
### this would normally be done using their own files
{
package Nifty;
sub new {
my $type = shift;
my $self = {@_};
if( $self->{type} ){
# require $self->{type}; # if the Nifty::A packages
# were in their own files
$type = $self->{type};
}
return bless( $self, $type);
}
sub get {
return "Some_Value";
}
### default print method
sub print_it {
my $self = shift;
my $str = shift;
return $str;
}
}
{
package Nifty::A;
@Nifty::A::ISA = qw(Nifty);
sub print_it {
my $self = shift;
my $str = shift;
return "<a href=$str>$str</a>";
}
}
{
package Nifty::B;
@Nifty::B::ISA = qw(Nifty);
sub print_it {
my $self = shift;
my $str = shift;
return uc($str);
}
}
# more types et cetera
### here is the main program
use strict;
my ($obj,$val);
$obj = Nifty->new();
$val = $obj->get();
print $obj->print_it( $val ) ,"\n";
$obj = Nifty->new(type=>'Nifty::A');
$val = $obj->get();
print $obj->print_it( $val ) ,"\n";
$obj = Nifty->new(type=>'Nifty::B');
$val = $obj->get();
print $obj->print_it( $val ) ,"\n";
exit;
Basically, put the normal functionality in the base class. Anything that changes, put in the sub classes.
my @a=qw(random brilliant braindead); print $a[rand(@a)]; |