in reply to Re^3: best way to inline code? (i.e. macro)
in thread best way to inline code? (i.e. macro)

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

Replies are listed 'Best First'.
Re^5: best way to inline code? (i.e. macro)
by samtregar (Abbot) on Oct 17, 2005 at 22:27 UTC
    I know, you're saying "that's not the problem"

    You read my mind! Try replacing that connect() with a connect_cached().

    -sam

      According to the DBI code:
      # XXX we expect Apache::DBI users to still call connect() # For library code using connect_cached() with mod_perl # we redirect those calls to Apache::DBI::connect() as well
      ...but thanks for having me double-check that! :)
Re^5: best way to inline code? (i.e. macro)
by perrin (Chancellor) on Oct 17, 2005 at 22:26 UTC
    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.