|laziness, impatience, and hubris|
There is a very good reason to use a base class. This way, you can do something like:
As for your concern about contracts and enforced APIs ... Perl doesn't do that. You're just going to have to make sure with all other developers that everyone agrees on an API.
IMHO, this is a "Good Thing"(tm). More communication between developers is good.
You can do a few things in the base class to provide for interface checking. Here's a canonical way to implemental a virtual function:
Then, when a client expects foo() to be a method and it isn't overriden, you can take a "Clue-By-Four"(tm) to the offending author. (Something along the lines of "Why didn't you follow the agreed-upon spec?!?" Of course, you need one of those to have a leg to stand on .........)
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.
In reply to Use sane Design (was Re3: OOP: Plugin Style Development)