I've had a little bit of a look, but can't
find anything in the mod_perl guide about this. Basically it seems to me that
'my' variables at the package level don't retain their value under
mod_perl.
For instance, consider the following
mod_perl handler.
package My::Module;
my $var;
sub handler {
warn($var ||
'blah');
$var =
'test';
}
Each time, the warn is for 'blah' because
the value 'test' is never retained in $var. Is this intended behaviour?
Personally I don't actually do this myself, but the module MIME::Types does, and
it's causing it to break badly.
Actually, it's a bit deeper than that.
MIME::Types does this:
my %list;sub new(@) { (bless {},
shift)-init( {@_} ) }
sub init($){ my ($self,
$args) = @_;
unless(keys %list) { local
$_;
while(MIME::Types::DATA)
{ s/\#.*//;
next
if m/^$/;
...
What I'm finding is that it ends up running
the loop everytime because (keys %list) == 0 always. Now in theory this should
work, it would just be a performance annoyance. But it doesn't, if I change the
code to
{ local
$_;
while(MIME::Types::DATA)
{ s/\#.*//;
warn($_);
next
if m/^$/;
...
I end up seeing in my logs...
[Mon Jan 14 13:47:01 2002] null: type:
application/index.response[Mon Jan 14 13:47:01 2002] null: type:
application/index.vnd[Mon Jan 14 13:47:01 2002] null: type:
application/iotp[Mon Jan 14 13:47:01 2002] null: type:
application/ipp[Mon Jan 14 13:47:01 2002] null: type: applicati at
/usr/local/lib/perl5/site_perl/5.6.1/MIME/Types.pm line 75, DATA line
30.
Weird, it's like the
MIME::Types::DATA handle just mysteriously ran out of data halfway
through reading from it. Does anybody have any idea what's going on here. What's
the best idea for fixing a module like this, change all:
my $var;
to
usr vars qw($var);
and submit a patch?
Rob