From: Jakub Narebski Date: Thu, 24 Aug 2006 20:59:18 GMT Subject: Re: Running gitweb under mod_perl Message-ID: In-Reply-To: <20060824193220.G4a28fdc4@leonov.stosberg.net> Dennis Stosberg wrote: > Jakub Narebski wrote: > >> By the way, does the "static" variables works under mod_perl? i.e. >> >> { >> my $private_var = "something" >> >> sub some_sub { >> ... >> } >> >> sub other_sub { >> ... >> } >> } > > Depends on what you expect. The variable will remain shared between > those subs over successive executions, but it will not be reinitialised > to "something" -- at least not visibly to the subs: Well, I wanted to share read-only variable, initialized once and not changed at all. It could be global variable, but it is used only by those two functions. > On the first invocation, $private_var is initialised and the two > subroutines are created. Internally, they refer to the _instance_ of > $private_var. The next time the script is run by mod_perl, $private_var > gets initialised again, but the subs are persistent and still refer to > the old instance. _Their_ copy of the variable will still be shared > between them, but it will not be reset to "something". I don't need to reinitialize $private_var -- it is not changed. > Apache::Registry wraps the whole script in another function, which > is called on each request, so your piece of code really looks somewhat > like this: > > #!/usr/bin/perl > sub handler { >     # do something >     { >         my $a = 'A'; >         sub sub_a { $a .= 'B' } >         sub sub_b { print $a."\n" } >     } >     sub_a(); >     sub_b(); > } > for(1..10) { handler() } Thanks for an explanation. Is there any way to check at _runtime_ if script is run under mod_perl, or would it be simplier (after script reorganization) for install time selection of using CGI, FastCGI, or Apache2::something...? -- Jakub Narebski Warsaw, Poland ShadeHawk on #git