Skip to content

Instantly share code, notes, and snippets.

@rymizuki
Created April 16, 2014 04:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rymizuki/10807245 to your computer and use it in GitHub Desktop.
Save rymizuki/10807245 to your computer and use it in GitHub Desktop.

perlのライブラリのロード

最も原始的なロード

require Module::name;

あるいは

require "Module/Name.pm";

requireを利用すると、::でsplitして/で結合し、.pmの拡張子をつけてくれるみたいな。 相対パスでrequireにパスを指定してModuleを読み込む。

相対パスはどこを基準に探すの?

PERL5LIBという環境変数にパスが格納されている。

例えば、以下のようなパスが環境変数PERL5LIBに設定されているとする。

PERL5LIB=".:/usr/local/lib/perl5:/usr/local/lib/perl5/site_perl/"

これは:で区切られたパスを複数指定されていることが多い。 複数パスで指定したときに、先頭からモジュールの検索が走る。

PERL5LIBを使うことの利点

  • 好きなところににモジュールがおける
  • 好きなところからモジュールが読める

Cartonとは

PERL5LIBをよしなにする君。

cpanfileに記述したモジュールをlocalディレクトリにインストールしつつ、carton execコマンドで起動したコマンド関して、localのディレクトリをパスに含めて実行してくれる。

どういうことか

globalにインストールされていないモジュール等をcpanfileに記述、carton installを走らせた後、carton exec runner.plでやれば、そのモジュールを利用できる。 同時に、他のプロジェクト等globalを参照しているperlで、先ほどcpanfileでインストールしたモジュールは利用されない。 なぜならlocalはパスに含まれないから。1

Footnotes

  1. 自らPERL5LIBに追加した場合は除く

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment