7

.pmファイルがある場合、パスに配置せずにファイルを作成する方法はありますかuse? @INC私の特定のユースケースでは、相対パスを使用したり、このディレクトリをに追加したりするよりも明確になると思います@INC

編集:明確化:

のすべての項目を反復処理する必要を避け、@INC代わりに関心のあるファイルを直接指定することを望んでいました。たとえば、Node.JS では、require('something')パスのリストを検索しますが、指定したrequire('/specific/something')場所に直接移動します。

Perl では、これが にある機能と同じかどうかはわかりませんが、機能しrequireているようです。

ただし、useステートメントにはベアワードが必要です。そのため、絶対パスを入力する方法に少し困惑しました。

4

5 に答える 5

6

これを使用できます:

use lib '/path/to/Perl_module_dir'; # can be both relative or absolute
use my_own_lib;

自分で変更でき@INCます (一時的に、心配するuse lib必要はありません。それも同様です)。

BEGIN{ @INC = ( '/path/to/Perl_module_dir', @INC ); } # relative or absolute too
use my_own_lib;
于 2013-02-13T13:40:00.677 に答える
4

コメントでの議論に従って、requireそれ自体を使用することをお勧めします。以下のように、

require "pathto/module/Newmodule.pm";

Newmodule::firstSub();

また、以下のように他のオプションを使用することもできます

  • use lib 'pathto/module';この行は、モジュールを使用するすべてのファイルに追加する必要があります。

lib 'pathto/module' を使用します。
Newmodule を使用します。

  • PERL5LIB環境変数を使用しています。export を使用してコマンド ラインでこれを設定するか、これを に追加し~/.bashrcて、ログインするたびに に追加されるようにします@INC。PERL5LIB はすべての @INC ディレクトリの前にディレクトリを追加することを思い出してください。したがって、最初に使用されます。また、Apache httpd.conf で設定することもできます。

    SetEnv PERL5LIB /fullpath/to/module
    
  • または、BEGIN ブロックに設定します。

于 2013-02-14T15:03:45.970 に答える
1

一般的に言えば、PERL5LIB環境変数を設定します。

export PERL5LIB=/home/ikegami/perl/lib

検索するモジュールがスクリプトに関連するディレクトリにインストールされることを意図している場合は、次を使用します。

use FindBin qw( $RealBin );
use lib $RealBin;
  # or
use lib "$RealBin/lib";
  # or
use lib "$RealBin/../lib";

これにより、スクリプトへのシンボリック リンクが正しく処理されます。

$ mkdir t

$ cat >t/a.pl
use FindBin qw( $RealBin );
use lib $RealBin;
use Module;

$ cat >t/Module.pm
package Module;
print "Module loaded\n";
1;

$ ln -s t/a.pl

$ perl a.pl
Module loaded
于 2013-02-13T20:49:20.637 に答える
0

Module::Loadモジュールを使用できます

use Module::Load;
load 'path/to/module.pm';
于 2013-02-13T14:28:46.127 に答える
0

FindBin::libsはトリックを行います:

# search up $FindBin::Bin looking for ./lib directories
# and "use lib" them.

use FindBin::libs;
于 2013-02-13T15:40:15.380 に答える