Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Custom Perl Modules on Apache2 Server

Tags:

apache

perl

Currently I am trying to use a bunch of custom perl modules, test.pm as one of them, within my Perl program with a WebUI. I am running it on a Windows 7 machine with Apache2 installed. When I run the program in cmd prompt by using perl test.pl, the program runs fine. However running it on Apache gives me this error.

[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm

I have used:

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p> \n";
}

and under the path variable, I do see the folder of where all the modules are located. Is there somewhere else I should use to add to the Perl Path?

In addition adding use lib "C:\testpm\"; to my code only changes the @INC to

(@INC contains: C:\testpm\ C:/Perl/lib C:/Perl/site/lib .)

Is there something additional you need to do to add paths to run custom perl modules on an apache server?

Solution Based On Answer: I found this to work the best. Within my httpd-perl.conf file, I added these lines:

<IfModule env_module>
    SetEnv PERL5LIB "C:\testpm;C:\testpm1;"
</IfModule>

(extended out with C:\testpm1 to show people with similar questions how to add even more module folders.)

like image 768
d.mc2 Avatar asked Aug 26 '26 15:08

d.mc2


2 Answers

The PATH environment variable has no bearing on where perl will load modules from, that is @INC. You said your path is in @INC, but in the error message you show, it is not.

Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at

You should call use lib during server startup. See http://perl.apache.org/docs/2.0/user/handlers/server.html#Startup_File.

Also, try removing the trailing slash, eg use lib 'C:\testpm'.

like image 67
Dondi Michael Stroma Avatar answered Aug 28 '26 16:08

Dondi Michael Stroma


use lib is good if you can add in setup file otherwise you will have to add it in every single perl script file.Rather than doing this, you can use PERL5LIB environment variable.

@INC in perl doesn't take value of PATH environment variable rather it can take from PERL5LIB environment variable.

You can add SetEnv PERL5LIB path_to_modules_directory directive in your apache configuration.Your perl script will add this path at front of original @INC value while executing your perl script.


Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!