【发布时间】:2013-12-12 10:13:32
【问题描述】:
尽管有很多查询都在问同一个问题。但是这里的错误是由 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,并发现通过 Web 搜索 Mavericks 已经预装了 perl 5.16。所以 apache 可能正在使用它,而 perl 正在使用 macport 安装的库。 在检查上面发布的 apache error_log 文件提到的路径时,我已将 Gpx.pm 复制到安装在 Geo 文件夹中的一个库中,但仍未解决。 关于运行 'which perl' 的结果
/opt/local/bin/perl
还有“哪个cpan”给出了
/opt/local/bin/cpan
请解决这个问题,因为我无法继续前进。而且我对apache不是很熟悉。
【问题讨论】:
标签: perl apache macports osx-mavericks gpx