in reply to ISA with packages ... A barebones minimal example

I am responding to your title, not your questions. If you want a barebones minimal example, drop the export. As JediWizard suggested, use OO, not function exporting. If you want a method, you need an object first.

#!/usr/bin/perl -l package main; for (Dog->new, Cat->new, Cow->new, Foo->new) { print "Oh the ", $_->name, " goes ", $_->speak; } package Animal; sub new { bless {}, shift } sub speak { return "ERROR: did not override" } sub name { return ref shift } package Dog; use base 'Animal'; sub speak { return "Woof" } package Cat; use base 'Animal'; sub speak { return "Meow" } package Cow; use base 'Animal'; sub speak { return "Moo" } package Foo; use base 'Animal';
Take a look at base ... use it instead of munging @INC directly, unless you absolutely have to.

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)