Возможно, вы могли бы реализовать это с помощью модуля :: Pluggable ? Это устранит необходимость регистрации.
Подход, который я использовал ранее, заключался в том, чтобы использовать Module :: Pluggable для загрузки моих дочерних модулей (это позволило мне добавить новые дочерние модули, просто записав и установив их). Каждый из дочерних классов будет иметь конструктор, который либо возвратит блаженный объект, либо undef. Вы зацикливаете свои плагины, пока не получите объект, а затем верните его.
Что-то вроде:
package MyClass;
use Module::Pluggable;
sub new
{
my ($class, @args) = @_;
for my $plugin ($class->plugins)
{
my $object = $plugin->new(@args);
return $object if $object;
}
}
Там есть класс: фабрика, но это может быть чуть-чуть сверху для ваших нужд.