There's nothing special about new() in Perl -- it's the same as any other method. You can override it, and you will have the same trials and tribulations with overriding it that you would have with any other inheritance scenario. It still sounds like you're complaining that you don't like OOP to me.
Re^5: A Growing Dislike for SQL-OOP Mappers
Replies are listed 'Best First'.
Well, I think it's a real problem for the dispatcher not to know the difference between abstract interface methods and infrastructural methods, which is why Perl 6 introduces the concept of "submethods" that are callable from outside the class,
but only if there's an exact type match on the invocant.
Otherwise the dispatcher keeps looking for a more appropriate method or submethod to dispatch to.
(There's also the concept of completely private methods that aren't visible from outside the class at all, but that's really a different beastie altogether.) Anyway, I think use of submethods would probably solve the first problem of the OP.