use strict; use warnings; use DBI; use Data::Dumper; use Hook::WrapSub qw( wrap_subs unwrap_subs ); wrap_subs \&log_prepare, 'DBI::db::prepare'; wrap_subs \&log_execute, 'DBI::st::execute'; my $dbh = DBI->connect( qw(DBI:driver:database:host user pass), {RaiseError=>1} ); my $sth = $dbh->prepare('select foo,bar from qux'); $sth->execute(); $sth->finish(); $dbh->disconnect; unwrap_subs qw(DBI::db::prepare DBI::st::execute); # just announce we were called and dump our args sub log_prepare { print "prepare called:\n", Dumper \@_; } sub log_execute { print "execute called:\n", Dumper \@_; }