Net::LDAP のラッパモジュール Net::LDAP::Alternative を Net::LDAP::Abstract に変えて、少し修正しました。svn で取得するには以下のように実行して下さい。
svn co http://svn.mizzy.org/public/library/perl/trunk/Net-LDAP-Abstract/
名称を Alternative から Abstract に変えたのは、LDAP アクセスの処理を Net::LDAP の実装よりも更に抽象化しているから、というのと、検索フィルタを SQL::Abstract ライクに書けるから、という理由からです。
たとえば、Net::LDAP では
my $msg = $ldap->search( base => 'o=southpark', filter => '(|(&(!(cn=*gosuke))(sn=miyashita))(uid=miya))', );
とやたらと括弧の多いフィルタを自分で書かなければいけないところを、Net::LDAP::Abstract では
my $entries = $ldap->search({ -or => { uid => 'miya', -and => { sn => 'miyashita', cn => { '!=' => '*gosuke' }, } } });
といった感じで書けます。これは超便利。
フィルタを組み立てるコードは、SQL::Abstract からそのまんまぱくってます。