0

Ubuntuの -> Apache - Perl (CGI)で初めて手を試しています。

Apache サーバーは/var/www、既定のindex.htmlファイルのフォルダーで正常に動作しています。しかし、CGI スクリプトを実行したいので、いくつかのフォーラムで提案されているように、(念のため) DBI もインストールしました。スクリプトが存在cgi-binするフォルダーへの完全なアクセス許可を設定しました。ライブラリを Perl ライブラリにリダイレクトするスクリプトを何度もselect.cgi微調整しようとしましたが、役に立ちませんでした。select.cgiファイルを変更httpd.confし、フォルダへのディレクトリ パスを設定しましたselect.cgi。それはうまくいきませんでした。も定義ScriptAliasし、作業ディレクトリに設定しました。それもうまくいきませんでした。誰にも役立つ指針はありますか。ありがとう。

4

2 に答える 2

4

これはあなたが望む正確な解決策ではありませんが、全体的なアイデアは次のようになります。

Cant locate xxxx.pm in @INC path問題の解決方法

デフォルトでは、perl は標準ライブラリ パスと現在のディレクトリでモジュールを探します。非標準の場所にインストールされているいくつかのモジュールを使用する必要がある場合があります。この状況に対処するには、いくつかの方法があります。

モジュールが@INCパスを使用しているかどうかを確認するには。

例:

perl -e 'use SOAP::Lite;'
perl -e 'use Error;'

インストール済みのシステムでこれらのコマンドを実行するSOAP::LiteError、Perl は何も出力せずにこれらのコマンドから単純に戻ります。

現在の標準ライブラリ パスを確認するには、次を使用します。

perl -le 'print foreach @INC'

管理者権限を持っている場合、最善の解決策は、システム定義のライブラリ パスのいずれかにモジュールをインストールすることです。

環境変数を設定すると、 PERL5LIB Perl はPERL5LIB、標準ライブラリと現在のディレクトリを検索する前に、環境変数で指定されたディレクトリでモジュールを検索します。したがって、この変数を設定してモジュールを見つけることができます。

例:

# For unix like systems
PERL5LIB=/home/path/lib:/usr/another/path/lib; export PERL5LIB

注:ディレクトリは、UNIX ではコロンで、Windows ではセミコロンで区切ります。

コマンドラインからコードを実行している場合は、-Iパラメーターを使用してください。構文は次のようになります。

perl -I /home/path/lib -I /usr/another/lib script.pl

また、スクリプトにライブラリパスを追加することもできます

スクリプトにパスを含めるコマンドは、 use libpathです。

例:

#!/usr/bin/perl
use lib "/home/path/lib";
use lib "/usr/another/lib";

use MyCustomModule;
于 2012-09-14T07:21:59.680 に答える
1

コメントで、最初に提供した情報と矛盾する情報を提供しました。後者の情報の方が信頼性が高いと思われるので、それを使用します。

モジュールへのパスは

/usr/lib/perl5/vendor_perl/5.8.5/foo/bar/Connection.pm

表示されたエラー メッセージ (改行が追加されています) は次のとおりです。

Can't locate foo/bar/Connection.pm in @INC (@INC contains:
   /etc/perl
   /usr/local/lib/perl/5.14.2
   /usr/local/share/perl/5.14.2
   /usr/lib/perl5
   /usr/share/perl5 
   /usr/lib/perl/5.14
   /usr/share/perl/5.14
   /usr/local/lib/site_perl
   .
   /usr/lib/perl5/vendor_perl/5.8.5/foo/bar/
) at ...

あなたは次のようなことをしました

use foo::bar::Connection;

また

require "foo/bar/Connection.pm";

パールが探した

  • /etc/perl/foo/bar/Connection.pm
  • /usr/local/lib/perl/5.14.2/foo/bar/Connection.pm
  • ...
  • /usr/lib/perl5/vendor_perl/5.8.5/foo/bar/foo/bar/Connection.pm

しかし、それらのどれも

/usr/lib/perl5/vendor_perl/5.8.5/foo/bar/Connection.pm

修正するのは簡単です。以下をスクリプトに追加します。

use lib '/usr/lib/perl5/vendor_perl/5.8.5'; 

他の可能な修正は、使用することです

 use Connection;

それ以外の

 use foo::bar::Connection;

どの修正が正しい修正であるかはpackage、モジュール側のその行がどのように見えるかによって異なります。が見つかった場合はpackage foo::bar::Connection;、変更する必要があります(パッケージ Connection; use` ディレクティブ@INCで示されているように) 。use lib, for example). If you find, you need to change the

于 2012-09-14T21:25:48.253 に答える