1

.plを実行するいくつかのファイルを含むフォルダーがありますmain.plrequire 'file.pl';メインファイルの先頭で使用することで、これらを正常に機能させることができました。私もいくつかのモジュールを問題なく使用しました。

「自家製」モジュールを使用しようとしてuse Add::Location::CSearch qw(c_search);いますが、それが使用されているファイルの先頭 (またはメイン ファイルの先頭) に追加してメイン ファイルを実行すると、次のCan't locate file.pl in @INC...エラーが発生します。メインファイルのリストfile.plの最初のファイルです。require

私が理解していることから、行を追加した後、同じディレクトリ内useのすべてを見つけようとします。requireエラー メッセージの(@INC contains: ...)最後に、いくつかのライブラリ/モジュール フォルダーが一覧表示されます。また.、現在のディレクトリの最後にもあります。

これでうまく説明できたと思います。それは紛らわしい!これがなぜ起こるのか、どのように解決するのかはわかりませんので、アイデアをいただければ幸いです。

編集:サンプルコード

main.pl

#!/usr/bin/perl
package testpack;

use lib '/hlib/...';
use Add::DB;
use List::Util qw(sum);
use List::MoreUtils qw(uniq);
use List::MoreUtils qw(firstidx);
use strict;
use warnings;

require 'file1.pl';
require 'file2.pl'; 
require 'file3.pl';

.
.
.

file1.pl

#!/usr/bin/perl
package testpack;
use Add::Location::CSearch qw(c_search);

これが問題のすべてです...残りのファイルには、サブルーチンなどを呼び出す作業コードがあります。

4

2 に答える 2

2

あなたのセットアップを見ないと確信が持てませんが、そこに何かを投げるつもりです。

何が起こっているのか、すべて同じディレクトリにある main.plと思われます。そのディレクトリから実行しているため、機能しています。モジュールを検索する場所のリストである にあるため、Perl は検索しています。file1.plrequire 'file1.pl'perl main.plfile1.pl.@INC

現在、新しいモジュールを開発しています。そのモジュールを開発している場所にディレクトリを変更しましたperl /path/to/main.plfile1.pl現在のディレクトリが異なるため、Perl は検索できなくなりました。

これに対する典型的な解決策は、FindBinを使用し、あなたが存在するuse libディレクトリを に置くことです。次に、実行するディレクトリに関係なく、同じディレクトリ内の他のライブラリを見つけることができます。main.pl@INCmain.pl

于 2012-09-20T13:04:27.053 に答える