Perの"use lib" 

Perlでuse libする時があるが、そのきちんとした意味がよく分からない。スクリプトと同じディレクトリにあるモジュールをuseしたいときには事前に

use FindBin;
use lib $FindBin::Bin;

とすることでいける。どういう仕組みなんだっけ?
まずperldoc FindBinしてみたところ、"FindBin - Locate directory of original perl script"とのこと。

EXPORTABLE VARIABLES
$Bin - path to bin directory from where script was invoked
$Script - basename of script from which perl was invoked
$RealBin - $Bin with all links resolved
$RealScript - $Script with all links resolved

とりあえずこんな感じのスクリプトで確認できる。

use FindBin;
print("\$Bin - $FindBin::Bin\n");
print("\$Script - $FindBin::Script\n");
print("\$RealBin - $FindBin::RealBin\n");
print("\$RealScript - $FindBin::RealScript\n");

一つのインタプリタ内で複数回のuse FindBin;は失敗するとのこと。

次にperldoc libすると"lib - manipulate @INC at compile time"とのこと。コンパイル時に@INCを追加(no lib LISTなら削除)するだけ。簡単だ。これで最初のコードがどのような動きをしているのか分かった。

Perlのuseとrequireの違い 

perlでuseとrequireの違いは何だろうか。
そもそもuseではなくrequireを使うべきケースはあるのか。

use
・コンパイル時に評価される
・ロードしたモジュールのimport関数を実行
・use Package;は下記と同意

BEGIN {
    require Package;
    MODULE->import(LIST);
}

require
・実行時に評価される
  だから条件分岐で読んだり読まなかったりできる。
  だから遅延読み込み可能。
  だからfork()後に読み込むと親プロセスでは読み込まない。
  だけどfork()する場合useの方がメモリ効率が良いらしい。なぜ?
・importが実行されない。必要ならば手で実行する。下記の通り。

require 'Package.pm';
Package->import('hoge');

結論としてはrequireを使うべきケースも存在しているようだ。 多分、自分はそんなケースにぶち当たらないと思うが。