A few notes (including an answer to your problem):
- Read up on placeholders in DBI. They will improve your database code, including fixing a few random bugs you may not have hit yet.
- Add warnings (either with the 'use warnings;' pragma if your Perl is 5.6+ or the -w flag if not). It will find bugs for you.
- You have a bug in your object. You are blessing an array reference (containing a single hash reference), but you are treating $self as a hash reference. This is a problem.
- You will want to look at 'use lib' to set up a way of shortening those require statements.
- Try varying the order you do the requires and the uses in your main script. Put the use before the requires then put the requires before the use. See if anything changes.
- Rewrite your requires to be modules using Exporter. Then, you use them and it will do the right thing, even if you use them in modules you're using (which is the problem here).