2011-02-28 39 views
0

我對perl和apache相當新,似乎對我的代碼有一個小問題。函數重新啓動後無法提供Apache

我有3個文件:

hw.pm

package hw; 

sub calc { 
    my $num1 = shift; 
    my $num2 = shift; 
    return $num1 + $num2; 
} 
1; 

startup.pl

use lib qw(path to where hw.pm is located); 
1; 

hel.pl

#!/usr/bin/perl -w 
use hw; 
use CGI qw(:standard); 
print header; 

my $ans = calc(5,4); 
print $ans; 

我沒有問題,重啓動Apache但是當我從瀏覽器訪問hel.pl我得到一個錯誤Can't locate hw.pm in @INC

如若startup.pl已經包括它@INC?或者我錯過了什麼?

我用perl v5.10.1和Apache2的v2.2.16

+1

hw.pm位於何處?在hel.pl中,你只包含'use hw',它假定hw.pm將位於@INC中(通常是通用模塊目錄+腳本運行的目錄)l也許你忘了合併startup.pl – 2011-02-28 02:39:22

回答

0

Perl是沒有找到hw.pm

嘗試從startup.pl

use lib qw(path to where hw.pm is located); 

複製此行hel.pl,取代 「use hw;」 在那裏。但首先確保路徑是正確的。


@INC - 數組@INC包含的地方尋找Perl腳本 列表 由DO EXPR進行評估,需要 ,或使用結構。它最初由 的參數任何-I 命令行開關,其次是 默認Perl庫,可能 「在/ usr/local/lib目錄/ perl的」,其次是 「」,表示當前 目錄。

+0

我放置在hel.pl中使用lib,這似乎工作。我的理解是,如果我把它放在從apache2.conf執行的startup.pl文件中,它會增加性能嗎? – Melvin 2011-02-28 21:00:24

+0

@Melvin對不起,我沒有關於這方面的信息。你在配置文件中檢查了startup.pl的路徑嗎? – tiago2014 2011-02-28 22:34:05

0

我設法解決它。最初我在apache2.conf過這樣的:

PerlRequire startup.pl

但加入這個代碼後:

<Directory /var/www> SetHandler perl-script PerlResponseHandler ModPerl::Registry PerlOptions +ParseHeaders Options +ExecCGI </Directory>

我能夠從hel.pl

訪問我的模塊

謝謝你們的幫助。