togatttiのエンジニアメモ

過度な期待はしないでください.

FindBin::libsを使ってlibまでのパスを取得する

FindBin::libsを使ってみたので、メモしておく。

普通のFindBinを使っても同じことができるけど、こっちのほうがすっきりしてる気がする

FindBin::libsとは

FindBin::libs

Perlモジュールなどが置いてあるディレクトリ(libとか)までのパスを取得して、

そのパスに対してuse libしてサーチパスに追加してくれる。

その他にも該当ディレクトリのパスを配列に格納したりできる。

使うときにはFindBin::libsは標準モジュールではないので、予めcpanmでインストール する必要がある。

$ cpanm FindBin::libs

後、推奨バージョンは5.10からの環境となる。

使ってみる

libまでのパスを取得し、サーチパスへ追加する
use FindBin::libs;

# use FindBin;
# use lib "$FindBin::Bin/lib";
# と同じ
libまでのパスを配列に格納し、出力する

引数にexportを指定すると、@libに該当ディレクトリまでのパスを格納する。

findbin.plというファイルに下記を追加する。

use FindBin::libs qw( export );
print join("\n", @lib);

実行すると

$ perl findbin.pl
/home/******/repos/git-cal/lib
/home/******/lib
lib以外のディレクトリまでのパスをサーチパスに追加する

libではなくて、moduleというディレクトリまでのパスを調べたいときはbaseにmoduleを設定する。

use FindBin::libs qw( base=module );

その他にも使えるオプション(subdir,egnore,)があり、柔軟に使えそうなので、調べたら追記する。