Perlモジュールのソースをその場で開くelisp

M-x describe-key RET C-xC-f が find-file-at-point になっていない人は、是非 .emacs

(ffap-bindings)

を加えましょう。

さて、find-file-at-pointのperldoc用拡張です。

use DBIx::Class;

とある時、DBIx::Classの上でfind-file-at-pointを実行すると

Find file or URL: c:/Cygwin/lib/perl5/site_perl/5.8/DBIx/Class.pm

のように補完されます。

(defun ffap-cperl-mode (file)
  (if (string-match "::" file)
      (let ((real-file (shell-command-to-string (concat "perldoc -l " file))))
        (string-match "\n*$" real-file)
        (ffap-locate-file (replace-match "" t t real-file) t)
        )))

(add-to-list 'ffap-alist '(cperl-mode . ffap-cperl-mode))

ただ、::が入ってないとダメだったり、::が入っててもうまく補完できないものがあったり、バグだらけです。
誰かが直してくれると嬉しい。