[OT] Perl OO Question.

Matt Lawrence matt.lawrence at virgin.net
Thu Oct 5 18:19:03 BST 2006


McGlinchy, Alistair wrote:
> Hi All,
>
> I have a noddy OO question.
>
> I am trying to OO-ify some file grepping code.  Every so often files
> appear in a directory and they all need the same generic tasks performed
> on them (scan for useful data, export stats into a standard format,
> maybe update RRD files, compress and move it to an archive). However the
> actual file formats varies enormously so I need bespoke code for each
> file type.  I have this stub below from a working mock-up, but it just
> seems wrong to me.  
>
> Surely a call to MainframeFile->new() must return a MainframeFile
> object; or is it ok to return a subclass of MainframeFile?
> I'm not even sure that MainframeFile should be allowed to "use"
> MainframeFile::SNI and MainframeFile::CCU at all. It seems backward.
> Perhaps I need a separate class that knows about MainframeFile,
> MainframeFile::SNI and MainframeFile::CCU and does the choice for me.
> If so what would it look like?
>   
Sounds like a job for Module::Pluggable.

use Module::Pluggable require => 1;

sub new {
    my $file_name = shift;
    for my $plugin (__PACKAGE__->plugins) {
       if ($plugin->looks_like_my_kind_of_file($file_name) {
          return $plugin->new;
       }
    }
    croak "No plugin found to handle file '$file_name'";
}

100% untested pseudo code.

Matt


More information about the london.pm mailing list