Visitor pattern package OpenBSD::PackingElement; sub do_stuff {} package OpenBSD::PackingElement::FileBase; sub do_stuff { my $self = shift; print "Any file: ", $self->fullname(), "\n"; } package OpenBSD::PackingElement::Manpage; sub do_stuff { my $self = shift; print "Man page: ", $self->fullname(), "\n"; } $plist = OpenBSD::PackingList->fromfile("f"); $plist->visit('do_stuff');