2010年10月13日 星期三

PERL 的 @INC 修改

在公司裝了VirtualBox玩, 擺脫slackware玩起了ubuntu
(其實沒擺脫, 工作上還是繼續用slackware)



OS裝起來後, 開始更新perl, 因為上面的版本是perl5.10.1,並非最新的perl5.12.2
當然更新前有看了看, Gtk2有裝起來, 好樣的, 省去一點功夫, 所以下命令把snapshot做起來再執行更新



$ sudo cpan
cpan > autobundle
cpan > install J/JE/JESSE/perl-5.12.2.tar.gz


更新的時候正好是午餐前, 於是很不耐煩的大略看了一下configure prompt出來的問題就按按按
吃完午餐順便把模組重裝



$ sudo cpan
cpan > install Bundle::Snapshot_yyyy_mm_dd_00

結果更新完一看, 搞笑, Gtk跑不起來了, 說@INC裡面找不到
想說原本可以跑的, 現在不行了, 要更新@INC該怎麼做呢?

答案是
recompile

要命!他已經寫進binary裡面了!
趕快看一下到底缺哪邊



$ /usr/bin/perl -e 'print "$_\n" foreach @INC'
$ /usr/local/bin/perl -e 'print "$_\n" foreach @INC'

就因為懶惰沒注意, 難道真的要一裝再裝嗎? 倒也不用

方法有三
1. /etc/bash.bashrc 或是 ~/.bashrc或是各家用的shell的rc檔內加上一行輸出,把缺的填一填然後看看有沒有改善


PERL5LIB=/home/path/lib:/usr/another/path/lib; export PERL5LIB


2. 下命令補上    


$ perl -I /home/path/lib -I /usr/another/lib script.pl


3. 每支程式都加上use    


use lib "/home/path/lib";


好吧
這三個我都不喜歡
所以參考了GTK2-Perl的網頁, 最後還順便把Padre裝一裝


$ sudo apt-get install libglib2.0-dev
$ sudo apt-get install libgtk2.0-dev
$ sudo cpan
cpan > install Gtk2


1 則留言:

CityPig 提到...

4. 在程式中加上:
sub BEGIN{
unshift @INC, "/home/path/lib";
}