Hi,

I have a problem using Time::Piece with mod_perl.

If Time::Piece is loaded on startup, either by startup.pl, in
PerlModule, or by being used in another module. It appears in %INC.

In a cgi-perl script running under Apache::Registry:
'use Time::Piece' does not cause the file to be re-read.
%Time::Piece:: is full of values, including %Time::Piece::import.
The use of any Time::Piece function or method falls back to AutoLoader,
which tries to load the <function>.al file.
The interpreter cannot find the <function>.al file, and issues a fatal
error.

I tested with another module (Data::Dumper) and it did not have the same
problem.

It still works if it's loaded by the cgi-perl script, either directly or
by another file.

The versions are: Time::Piece v 1.08, perl v 5.6.0, apache v1.3.31.

Time::Piece itself is a useful little module. It overloads (via
globbing) gmtime and localtime, but I get the same result if I avoid
that by calling use Time::Piece() in the startup script and
Time::Piece->new in the test script. 

This is the section of Time::Piece which isn't a variable, constant, or
subroutine definition:
#------------------------------------------------------------cut--------
------------------------------------------------------
package Time::Piece;
use strict;
use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);
require Exporter;
require DynaLoader;
use Time::Seconds;
use Carp;
use Time::Local;
use UNIVERSAL qw(isa);
@ISA = qw(Exporter DynaLoader);
@EXPORT = qw(
    localtime
    gmtime
);
%EXPORT_TAGS = (
    ':override' => 'internal',
    );
$VERSION = '1.08';
bootstrap Time::Piece $VERSION;
#------------------------------------------------------------cut--------
------------------------------------------------------

This is startup.pl:
#------------------------------------------------------------cut--------
------------------------------------------------------
#!/opt/bin/perl

# modify the include path to include directory containing our mod_perl
scripts
BEGIN {
#    use Apache();
    use lib '/usr/local/apache_1.3.31/mod-perl';
    use lib '/home/ianm/lib/site_perl/5.6.1';
    use lib '/home/ianm/lib/perl5/site_perl/5.6.1';
    #use lib '/home/ianm/lib/site_perl/5.6.1/sun4-solaris';
}

# load modules
use Time::Piece;
use Data::Dumper();
1;

This is test.pl:
#!/opt/bin/perl-5.6.1
use warnings;
use Data::Dumper;
print "Perl version = $]<br/>";
print "Process = " . $$ . '<br/>';
print Data::Dumper::Dumper(\%INC);
# This works.
use Time::Piece ();
warn Dumper(\%INC);
# This fails.
Time::Piece->import;
1;
#------------------------------------------------------------cut--------
------------------------------------------------------

This is the error message:
#------------------------------------------------------------cut--------
------------------------------------------------------
[Mon Jan 17 11:29:18 2005] [notice] Apache/1.3.31 (Unix) mod_perl/1.29
configured -- resuming normal operations
[Mon Jan 17 11:29:18 2005] [info] Server built: Nov  3 2004 20:46:35
[Mon Jan 17 11:29:18 2005] [notice] Accept mutex: fcntl (Default: fcntl)
$VAR1 = {
          'Exporter.pm' => '/opt/lib/perl5/5.6.1/Exporter.pm',
          'Carp.pm' => '/opt/lib/perl5/5.6.1/Carp.pm',
          'ModPerl/Hello.pm' =>
'/usr/local/apache_1.3.31/mod-perl/ModPerl/Hello.pm',
          'Time/Local.pm' => '/opt/lib/perl5/5.6.1/Time/Local.pm',
          'lib.pm' => '/opt/lib/perl5/5.6.1/lib.pm',
          'DynaLoader.pm' =>
'/opt/lib/perl5/5.6.1/sun4-solaris/DynaLoader.pm',
          'Apache/Status.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Status.pm',
          'Apache/Registry.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Registry.pm',
          'CGI/Util.pm' => '/opt/lib/perl5/5.6.1/CGI/Util.pm',
          'Apache.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache.pm',
          'constant.pm' => '/opt/lib/perl5/5.6.1/constant.pm',
          'Apache/Constants.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Constants.pm',
          'strict.pm' => '/opt/lib/perl5/5.6.1/strict.pm',
          'vars.pm' => '/opt/lib/perl5/5.6.1/vars.pm',
          'Config.pm' => '/opt/lib/perl5/5.6.1/sun4-solaris/Config.pm',
          'integer.pm' => '/opt/lib/perl5/5.6.1/integer.pm',
          'Apache/Symbol.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Symbol.pm',
          'CGI.pm' => '/opt/lib/perl5/5.6.1/CGI.pm',
          'Apache/Server.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Server.pm',
          'Data/Dumper.pm' =>
'/opt/lib/perl5/5.6.1/sun4-solaris/Data/Dumper.pm',
          'XSLoader.pm' =>
'/opt/lib/perl5/5.6.1/sun4-solaris/XSLoader.pm',
          'Apache/Connection.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Connection.pm',
          'Exporter/Heavy.pm' =>
'/opt/lib/perl5/5.6.1/Exporter/Heavy.pm',
          'B.pm' => '/opt/lib/perl5/5.6.1/sun4-solaris/B.pm',
          'Apache/Constants/Exports.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Constants/Exports.pm
',
          'conf/startup_modperl.pl' =>
'/home/ianm/apache//conf/startup_modperl.pl',
          'mod_perl.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/mod_perl.pm',
          'Time/Piece.pm' =>
'/home/ianm/lib/site_perl/5.6.1/sun4-solaris/Time/Piece.pm',
          'warnings/register.pm' =>
'/opt/lib/perl5/5.6.1/warnings/register.pm',
          'warnings.pm' => '/opt/lib/perl5/5.6.1/warnings.pm',
          'Apache/Table.pm' =>
'/opt/lib/perl5/site_perl/5.6.1/sun4-solaris/Apache/Table.pm',
          'Time/Seconds.pm' =>
'/home/ianm/lib/site_perl/5.6.1/sun4-solaris/Time/Seconds.pm',
          'UNIVERSAL.pm' => '/opt/lib/perl5/5.6.1/UNIVERSAL.pm',
          'overload.pm' => '/opt/lib/perl5/5.6.1/overload.pm',
          'AutoLoader.pm' => '/opt/lib/perl5/5.6.1/AutoLoader.pm'
        };
Use of inherited AUTOLOAD for non-method Time::Piece::import() is
deprecated at /home/ianm/cgi-perl/test.pl line 13.
[Mon Jan 17 11:29:27 2005] [error] Can't locate
auto/Time/Piece/import.al in @INC (@INC contains:
/usr/local/apache_1.3.31/mod-perl /home/ianm/conquer/cgi-bin/lib
/home/system/cgi-bin/lib /opt/lib/perl5/site_perl
/opt/lib/perl5/site_perl/5.6.1 /opt/lib/perl5/5.6.1
/opt/lib/perl5/5.6.1/sun4-solaris
/home/ianm/lib/perl5/site_perl/5.6.1/sun4-solaris
/home/ianm/lib/perl5/site_perl/5.6.1
/home/ianm/lib/site_perl/5.6.1/sun4-solaris
/home/ianm/lib/site_perl/5.6.1 /usr/local/apache_1.3.31/mod-perl
/home/ianm/conquer/cgi-bin/lib/sun4-solaris
/home/ianm/conquer/cgi-bin/lib /home/ianm/lib/perl5/5.6.1/sun4-solaris
/home/ianm/lib/perl5/5.6.1 /home/ianm/lib/perl5 /home/ianm/lib/site_perl
/home/ianm/lib/perl5/site_perl/5.6.1//sun4-solaris
/home/ianm/lib/perl5/site_perl/5.6.1/ /opt/lib/perl5/5.6.1/sun4-solaris
/opt/lib/perl5/5.6.1 /opt/lib/perl5/site_perl/5.6.1/sun4-solaris
/opt/lib/perl5/site_perl/5.6.1 /opt/lib/perl5/site_perl .
/home/ianm/apache/ /home/ianm/apache/lib/perl) at
/home/ianm/cgi-perl/test.pl line 13\n
#------------------------------------------------------------cut--------
------------------------------------------------------

Thank you in advance for any help,

Ian

--
Dr Ian McDonald
Software Engineer, Interactive Drama & Entertainment
A300, 56-58 Wood Lane (CH), London W12 7SB
020 822 56162
[EMAIL PROTECTED] / "Ian McDonald-ONLINE" (not "Ian MacDonald")



http://www.bbc.co.uk/

This e-mail (and any attachments) is confidential and may contain
personal views which are not the views of the BBC unless specifically
stated.
If you have received it in error, please delete it from your system. 
Do not use, copy or disclose the information in any way nor act in
reliance on it and notify the sender immediately. Please note that the
BBC monitors e-mails sent or received. 
Further communication will signify your consent to this.

Reply via email to