# cgi.pl
use strict;
use warnings;
@One::ISA = @Two::ISA = 'Zero';
{
package Zero;
use base 'CGI::' . shift;
sub dispatch { shift->param ? 'Two' : 'One'; }
sub render {
print my $self = shift, "\n";
print "$_: " . $self->param( $_ ) . "\n" for $self->param;
}
}
@MY_Zero::ISA = 'Zero';
shift->activate;
__END__
####
# CGI/Classic.pm
use strict;
use warnings;
{
package CGI::Classic;
use CGI;
my $CGI;
sub activate {
$CGI = CGI->new;
shift->dispatch->render;
}
sub param { shift; $CGI->param( @_ ) };
sub dispatch { die 'subclass responsibility' }
sub render { die 'subclass responsibility' }
}
1;
__END__
##
##
shift; # discard script's second argument
Zero->new( 'parent*' => 'Zero' )->activate;