Hi all,
Thank you Alan, Hans, and Ben for your replies! The good news is that
Hans' suggestion worked; the "bad" news is that I don't understand one
point still and am wondering if someone could explain it to me even
though it seems like "basic Perl"...
What I have now is:
{
package HTML::Mason::Commands;
use MyUtils;
}
May I ask what is the purpose of these parentheses? I know they limit
scope, so its purpose is to incorporate "MyUtils" into the package
HTML::Mason::Commands only and not affect anything else in my handler
file (i.e., the file that my handler is in)? I also have other "use"
statements in the file:
use Apache2::Status ( );
use HTML::Mason::ApacheHandler;
use Apache2::Const -compile => ':common';
use Apache2::Upload;
use Benchmark;
how do I decide whether they should also be included in or does it not
matter? The site seems to work whether I put them in or leave them at
the current location [top of the file]. How do I decide? My guess is
that they should be left out because they are not used *by*
HTML::Mason::Commands...but with it.
BenRifkah Bergsten-Buret wrote:
> I second this method recommended by Hans. I strongly recommend staying away
> from putting use statements in all of your components if you run Mason under
> mod_perl. This can lead to intermittent bugs due to race conditions if you
> forget to put a use statement in a component where the code uses a module.
>
> For example you write component a including a "use CGI" statement and
> instanciates a CGI object. Later you work on component b and instanciate a
> CGI object. When you test component B it works fine in development because
> you've already tested component A which loaded CGI into the embedded perl
> runtime. However, when you push code to production or restart the server
> you may find that sometimes component B doesn't work. This happens because
> you forgot to include a use CGI statement in component B.
>
Argh...yes, you actually described a problem that I *was* encountering
during development and rather than thinking of a better way to do it, I
was blaming myself for forgetting the "use" statement. I finally
guessed that maybe rather than blaming myself, I should find a better
way to do it.
> Using all of your modules in your mason handler will ensure that you never
> have to deal with such a race condition.
>
> I've never used the PerlModule directive before but the mod_perl 2.0
> documentation says that it's the equivalent of doing a "require MyModule"
> which isn't exactly the same as a use statement. perldoc -f use for
> details.
>
This was another one of my problems...I was doing "PerlModule" and
didn't realize it doesn't do an "import" so I thought something else was
going wrong. I was having many inconsistencies during
development...Mason compilation problems that were not repeatably
easily. I see why now...
Thank you for the help!
Ray
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Mason-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mason-users