The proxy approach should work. Try creating a class using DBI as the base class. Then re-define the methods that you're interested in; e.g.,
------- MyDBI.pm -------
package MyDBI;
use DBI;
@ISA = qw(DBI);
sub execute{
print "DBI::execute() called with ".join(',', @_)."\n";
$_[0]->SUPER::execute(@_);
}
# other methods here
------- MyDBI.pm -------
The only "problem" with this is that the code that you're trying to debug needs to "use MyDBI;" and not "use DBI;".
There's also a problem with things like "my $dbh = DBI->new(foo);" since they need to be changed to "my $dbh = MyDBI->new(foo);". There may be a workaround for this but I'm not that good with Perl OOP.
--perlplexer