in reply to OO code split

Unfortunately, this is the sort of question that can only be answered with experience. Do you have some sort of model where you can separate data and behavior into discrete objects? Do you find yourself passing the same kind of information in and out of your functions?

There's nothing wrong with using Exporter sanely. If you can split things up into modules, and some of them don't immediately lend themselves to object orientation, don't force it.

Hmm, this doesn't seem like a very helpful answer. I guess my rule of thumb is, "Use OO when it makes things easier." You can certainly accomplish the same kinds of things in a purely-procedural language as with a functional or an object oriented language. The question is one of relative ease.