えーっ
perlbrewなperlで共通のパスを@INCに入れたい、もしくはperl実行時にごにょごにょしたい話 - (ひ)メモ
perlbrewでsitecustomizeを有効にしてビルドするには
perlbrew install --notest 5.16.1 \
--sitecustomize \
/usr/oreno/etc/perl/sitecustomize.pl
とします
そんな親友を助けるためだけに契約するようなことをしなくても、全ての@INCをプロセスが生まれる前に上書きできますよ。
-Iさえあれば。
実際に見てみましょう。-Idirectory
Directories specified by -I are prepended to the search path for modules (@INC).
% cat /Users/dankogai/tmp/yInit.pm local $\ = "\n"; print for @INC; 1;
% perl -MyInit -e 1 Can't locate yInit.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .). BEGIN failed--compilation aborted. % perl -I/Users/dankogai/tmp -MyInit -e 1 /Users/dankogai/tmp /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .
先史時代(Perl 4以前)から存在する由緒あるオプションです。-Mより古い。
Perl Cookbook にも Recipe 12.8 で紹介されてます。
PERL5LIB(でパスを指定)やPERL5OPT(で-Mlib=/path/to)でもできますが、perl -MOrenoConf とした場合はまだ環境変数が評価される前なのでCan't locateと怒られてしまいます。
確かに-Mlib=/path/toだとこうなります。
% env PERL5OPT=-Mlib=/Users/dankogai/tmp perl -MyInit -e 1 Can't locate yInit.pm in @INC (@INC contains: /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .). BEGIN failed--compilation aborted.
が、 -I/path/to も PERL5LIB も使えます。
% env PERL5OPT=-I/Users/dankogai/tmp perl -MyInit -e 1 /Users/dankogai/tmp /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .
% env PERL5LIB=/Users/dankogai/tmp perl -MyInit -e 1 /Users/dankogai/tmp /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .
なのでこれもOK。
% env PERL5LIB=/Users/dankogai/tmp PERL5OPT=-MyInit perl -e 1 /Users/dankogai/tmp /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 .
よって shebang でこうすることさえできます。
% cat ~/tmp/hello.pl #!/usr/bin/env PERL5LIB=/Users/dankogai/tmp PERL5OPT=-MyInit perl print "Hello, $^V", "\n"
% ~/tmp/hello.pl /Users/dankogai/tmp /usr/local/lib/perl5/site_perl/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/site_perl/5.16.1 /usr/local/lib/perl5/5.16.1/darwin-thread-multi-2level /usr/local/lib/perl5/5.16.1 . Hello, v5.16.1
@INCにお困りの方は、-Iを忘れずに。
Dan the Perl Monger

このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。