PERL5LIBに編集中のCatAppのlibまでのパスを追加するelisp

(defun perllib-check-path (lst lib-path)
  (let ((dir (car lst)) (lst (cdr lst)))
    (setf lib-path (concat lib-path "/" dir))
    (if lst
        (if (string= dir "lib")
            lib-path
          (perllib-check-path lst lib-path)))))

(defun set-perl5lib ()
  "insert path to PERL5LIB if its path includes 'lib' directory."
  (interactive)
  (setf path-list (cdr (split-string buffer-file-name "/"))
        lib-path (perllib-check-path path-list ""))
  (if lib-path
      (let ()
        (setenv "PERL5LIB" lib-path)
        (message (concat "PERL5LIB=" lib-path)))))

(provide 'set-perl5lib)

 例えばこれをset-perl5lib.elとかに保存しておいて、「M-x load-file /path/to/set-perl5lib.el」とか、elファイル置き場に置いといて、.emacsに「(require 'set-perl5lib)」とかやっておけばおk。使うときは「M-x set-perl5lib」を実行。
 プログラム見ればわかるとおり、「lib」というディレクトリ名があったらそこまでのパスをPERL5LIBに登録するだけなので、実はCatalystは使う必要はありません。まあでも時流的に、たいていは自作モジュールはlib以下におくよね、と。libが2個目以上あるときは知らん。
 シチュエーションとしては、Flymakeを使ってるときに自作モジュールのロードエラーになったときにどうぞ(因みに、そもそもはid:typesterの要望です)。だからホントはFlymakeに組み込むのがベストなんだろうけど、ひとまず満足してしまったので、一旦放流。これを組み込んでくれる猛者がいるといいなぁ…。
(追記)
 あっさり対応できた。以下、.emacs上での操作。まずあらかじめ上のスクリプトを「(require 'set-perl5lib)」でロードしておき、flymake-perl-load関数をオーバーライドする。関数内ならどこでもいいと思うけど、とりあえず僕は最後の「(flymake-mode t)」の直前に「(set-perl5lib)」を追加。これでOK!

(defun flymake-perl-load ()
  (interactive)
  (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
    (setq flymake-check-was-interrupted t))
  (ad-activate 'flymake-post-syntax-check)
  (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks))
  (setq flymake-err-line-patterns flymake-perl-err-line-patterns)
  (set-perl5lib)    ;ここに追加した
  (flymake-mode t))

(更に追記 1/18)
 id:typesterより「codereposに上げるべき」とおだてられ、ついに僕もcodereposデビューしました!
 →http://coderepos.org/share/browser/lang/elisp/set-perl5lib
 因みにid:yappo氏より

なんと200人目のコミッター当選です!
おめでとうございます!

 とメールが。ありがとうございます。
 (ジョークだと思ってコミッタ一覧を確認しに行ったのは内緒:-D)
 これを社内IRCに投げたら、更にid:typesterから「#codereposにも来い」と誘われたので、これから行ってきます。ちょー緊張する。