You already have an interpreter instance if you are running code under mod_perl. String eval under mod_perl does have the same downsides that it does in any other perl code though. | [reply] |
Nice to see a familiar mod_perl'er on the PM site :) (Hi Perrin).
FWIW, the code in question is a DB_Connect sub that calls Apache::DBI's DBI->connect. So I've got lots of select/udpate subroutines, and they each call the DB_Connect sub at the beginning to get a database handle. I'd consider just making the $dbh a global var, but then I'd lose the implicit Apache::DBI ping/reconnect.
sub DB_connect {
return DBI->connect(
$Const::DB_Name,
$Const::DB_User,
$Const::DB_Pass,
{ PrintError => 1, RaiseError => 1, AutoCommit => 1 }
) || die "DATABASE CONNECTION ERROR: " . $DBI::errstr . "\n";
}
Anyways, running DProf shows that the frequent DB_Connect calls are sucking extra CPU cycles, so I thought (if there was an easy way to try it) I'd just inline my DBI->connect subroutine. I know, you're saying "that's not the problem" or "that's a fishing expedition", etc. Very possible... and that's why I was hoping there was a very easy way to test inlining the sub.
I'm not crazy about the notion of using eval '', particularly since it looks like from the first suggestion given that I have to eval all of my calling subs, which is alot. Really, ideally, I think even a C-style preparser #define would do the trick.... if one existed in Perl...
MFN | [reply] [d/l] |
| [reply] |
I doubt it's worth it. You might try sorting your profile by wall time to see how it changes things. However, if you want to pursue it, do a search on this site for "macro" and I think you'll find lots of stuff. The simplest answer is probably to just the cpp on your perl code.
| [reply] |