package Processor; # constructor in base class only sub new { my $pkg = shift; bless {}, $pkg; } # init, process, finish in subclasses 1; #### package Processor::SomeSubClass; @ISA = ( Processor ); sub init { my $self = shift; # do something } # should be called process_line # this one upcases it sub process { my $self = shift; my $line = shift; return uc( $line ); } sub finish { my $self = shift; # do something } 1; #### #!/usr/bin/perl use Processor; use Processor::SomeSubClass; my $p = Processor::SomeSubClass->new(); $p->init; while (<>) { print $p->process( $_ ); } $p->finish;