I think
Module::Pluggable is a good start as well. The general tasks that a plugin API must handle are
- registration of all plugins upon program startup - the above can handle this
- initialization of plugins - put any initialization code in constructor
- activate plugins - need to have something like an activate() method in the plugin class
- cleanup of plugins - More important for C than Perl, but plugins may need to write preference files, etc.
Along with these basic tasks, you will need to figure out what sort of program data structures activate() has access to and
what it should return. Always return error codes and check them. It makes debugging a lot easier.