虽然有很多疑问在问同一个问题。但是这里的错误是由apache而不是Perl抛出的。 我正在尝试在Mac OS X Mavericks上为客户端创建XML响应,并编写了如下的perl脚本:
#!/usr/bin/perl -wT
use lib '/opt/local/lib/perl5/site_perl/5.16.1/Geo';
use strict;
use CGI;
use Geo::Gpx;
open (FH, "/tmp/temp/file.txt") or print ("Unable to Open File");
my $gpx = Geo::Gpx->new;
my $cgi = CGI->new;
print $cgi->header(-type=>"text/gpx",-status=>"200 OK");
my $lon;
my @arr = <FH>;
foreach(@arr){
my %waypoints;
my $var = $_;
my @lat = split(/\s+/,$var);
#@waypoints=split(/\s+/,$_);
$waypoints{$lat[0]}=$lat[1];
$waypoints{$lat[2]}=$lat[3];
$gpx->add_waypoint(\%waypoints);
}
my $xml = $gpx->xml;
print $xml;
open FILE, ">/tmp/temp/xmlfile.xml" or die $!;
print FILE $xml;
close (FILE);
close(FH);
为了让apache找到Gpx.pm的实际路径,我使用'use lib'来显示文件的真实路径。 虽然这个脚本在命令行上运行得很好,但是我的apache服务器抛出了以下错误:
[Tue Nov 26 18:34:51 2013] [error] [client 127.0.0.1] Can't locate Geo/Gpx.pm in @INC
(@INC contains: /opt/local/lib/perl5/site_perl/5.16.1/Geo /Library/Perl/5.16/darwin-thread-multi-2level
/Library/Perl/5.16 /Network/Library/Perl/5.16/darwin-thread-multi-2level /Network/Library/Perl/5.16
/Library/Perl/Updates/5.16.2 /System/Library/Perl/5.16/darwin-thread-multi-2level /System/Library/Perl/5.16
/System/Library/Perl/Extras/5.16/darwin-thread-multi-2level /System/Library/Perl/Extras/5.16 .) at /Users/Rachit/Sites/temp.pl line 7.
[Tue Nov 26 18:34:51 2013] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at /Users/Rachit/Sites/temp.pl line 7.
我已经使用过macports并且已经发现在网上搜索Mavericks已经预装了perl 5.16。所以apache可能正在使用它,而perl正在使用macport安装的库。 在我上面发布的检查apache error_log文件提到的路径时,我已经在Geo Folder中安装的一个库中复制了Gpx.pm但仍未解决它。 在运行'哪个perl'结果
/opt/local/bin/perl
'哪个cpan'正在给予
/opt/local/bin/cpan
请妥善解决此问题,因为我无法继续前进。而且我对apache并不熟悉。
答案 0 :(得分:1)
/opt/local/lib/perl5/site_perl/5.16.1/Geo
应为/opt/local/lib/perl5/site_perl/5.16.1/
,因为它会将完整的模块名称(将::
替换为/
)附加到每个路径以查找文件。