modperl-use_require_not_use

This is part of The Pile, a partial archive of some open source mailing lists and newsgroups.



To: Andrew Green <andrew@article7.co.uk>
From: Stas Bekman <stas@stason.org>
Subject: Re: Preloading Fcntl.pm
Date: Tue, 11 Dec 2001 01:54:22 +0800

Andrew Green wrote:

> In article <01121017211008.18716@morgaine.knowscape.org>,
>    Robin Berjon <robin@knowscape.com> wrote:
> 
> 
>>Have you tried to see if it works without the trailing () ?
>>
> 
> I have, yes, and I'm afraid it makes no difference.

Try to call:

require Fcntl;

instead.

I think the general advise is to always call require() and not use() in 
startup.pl, unless you have a reason for calling certain modules' 
import() method.


===

To: Jorge Godoy <godoy@conectiva.com>
From: Stas Bekman <stas@stason.org>
Subject: Re: Preloading Fcntl.pm
Date: Tue, 11 Dec 2001 12:01:08 +0800

Jorge Godoy wrote:

> Stas Bekman <stas@stason.org> writes:
> 
> 
>>I think the general advise is to always call require() and not use()
>>in startup.pl, unless you have a reason for calling certain modules'
>>import() method.

> Wouldn't that affect mod_perl's advantage of sharing the modules? I
> mean, would everything be in it's separate namespace and loaded only
> once for every module as it is with use?


Please read the doc for use().

perldoc -f use

               Imports some semantics into the current
               package from the named module, generally by
               aliasing certain subroutine or variable names
               into your package.  It is exactly equivalent
               to

                    BEGIN { require Module; import Module LIST; }


use == require + import (almost), and we don't need import()
to get the sharing in place.

Also see:
http://perl.apache.org/guide/perl.html#use_

===

To: Andrew Green <andrew@article7.co.uk>
From: Stas Bekman <stas@stason.org>
Subject: Re: Preloading Fcntl.pm
Date: Tue, 11 Dec 2001 18:43:28 +0800

Andrew Green wrote:

> In article <3C14F6CE.1070509@stason.org>,
>    Stas Bekman <stas@stason.org> wrote:
> 
> 
>>Try to call:
>>require Fcntl;
>>instead.
>>
> 
> Thanks for the tip.  I'm afraid the above verbatim produces the following
> error on restart:
> 
> | Shutting down http:                                        [  OK  ]
> | Starting httpd: [Mon Dec 10 20:41:18 2001] [error] syntax error at
> | /etc/httpd/lib/perl/modperl.pl line 14, near "require Fcntl"
> | BEGIN not safe after errors--compilation aborted at
> | /etc/httpd/lib/perl/modperl.pl line 15.
> | Syntax error on line 395 of /etc/httpd/conf/httpd.conf:
> | syntax error at /etc/httpd/lib/perl/modperl.pl line 14, near "require
> | Fcntl"
> | BEGIN not safe after errors--compilation aborted at
> | /etc/httpd/lib/perl/modperl.pl line 15.
> |                                                           [FAILED]


Weird, what Perl version are you using? Can you do:

perl -MFcntl -le1

or

perl -le 'require Fcntl'

I've tested with 5.6.1, it works.

 
> I should note that /etc/httpd/lib/perl/modperl.pl is my startup script,
> and that line 395 of httpd.conf is the PerlRequire directive.  Beyond
> that, I'm not at all sure whether the above is especially instructive.
> 
> Changing the startup script to:
> 
>      require "Fcntl.pm";
> 
> instead avoids the error, but displays the same
> "pretends-to-restart-OK-but-actually-doesn't" behaviour I described
> before.  I should also mention that trying a PerlModule directive instead
> doesn't help either.
> 
> It's very bewildering!


===

To: modperl@apache.org
From: Andrew Green <andrew@article7.co.uk>
Subject: Re: Preloading Fcntl.pm
Date: Tue, 11 Dec 2001 10:59:09 +0000 (GMT)

In article <3C15E350.50106@stason.org>,
   Stas Bekman <stas@stason.org> wrote:

> Weird, what Perl version are you using? Can you do:

> perl -MFcntl -le1
> or
> perl -le 'require Fcntl'

Both seem to work (producing no output, but no errors either).  The
*really* peculiar thing is that actual scripts that "use Fcntl" work with
no problems -- but I can't preload the module, or preload other modules
that use it.

According to /perl-status, I'm using perl 5.00503 for Apache 1.3.19 on
Red Hat 6.2, mod_perl 1.21.  On processes that have accessed these
scripts, Fcntl shows up on /perl-status?inc and claims to be version 1.03.

If it's any help, HTML::Entities displays exactly the same behaviour (and
claims to be version 1.22).

===

To: modperl@apache.org
From: Jean-Michel Hiver <jhiver@mkdoc.com>
Subject: Re: Preloading Fcntl.pm
Date: Tue, 11 Dec 2001 13:06:16 +0000

>> Wouldn't that affect mod_perl's advantage of sharing the modules? I
>> mean, would everything be in it's separate namespace and loaded only
>> once for every module as it is with use?

I don't know about you guys, but I don't feel that sharing the modules
is that much of an advantage. If you write large scripts that actually
use modules of your own which can be different depending on the version
of the script, it means that you cannot run different versions of the
script on the same box, which IMHO is not very convenient...

Do you know if there's a way to avoid this?
Cheers,

===

To: Jean-Michel Hiver <jhiver@mkdoc.com>
From: Stas Bekman <stas@stason.org>
Subject: Re: Preloading Fcntl.pm
Date: Wed, 12 Dec 2001 00:18:13 +0800

Jean-Michel Hiver wrote:

>>>Wouldn't that affect mod_perl's advantage of sharing the modules? I
>>>mean, would everything be in it's separate namespace and loaded only
>>>once for every module as it is with use?
>>>
> 
> I don't know about you guys, but I don't feel that sharing the modules
> is that much of an advantage. 


It is. It can save you a lot of memory. Check the numbers in the 
performance and scenario chapters of the mod_perl guide.

> If you write large scripts that actually
> use modules of your own which can be different depending on the version
> of the script, it means that you cannot run different versions of the
> script on the same box, which IMHO is not very convenient...


But this has nothing to do with sharing. You've this problem when you 
share or not. modperl-2.0 solves this problem. In 1.x you have to use 
various workarounds, some of the are explained in the guide.


===

To: modperl@apache.org
From: Andrew Green <andrew@article7.co.uk>
Subject: Re: Preloading Fcntl.pm
Date: Fri, 14 Dec 2001 16:18:31 +0000 (GMT)

In article <3C16332A.9060505@stason.org>,
   Stas Bekman <stas@stason.org> wrote:

> Andrew Green wrote:

> > The *really* peculiar thing is that actual scripts that "use Fcntl"
> > work with no problems -- but I can't preload the module, or preload
> > other modules that use it.

> Hmm, how about upgrading modperl?

I've now finally managed to upgrade mod_perl to 1.23, and the problem has
completely disappeared.  I didn't even need $Apache::Server::ReStarting
(which isn't available on 1.21) to be checked in the end.

Many thanks to everyone for your help.

===




the rest of The Pile (a partial mailing list archive)

doom@kzsu.stanford.edu