えーっ
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
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。