開発環境バージョンアップ

今週は水曜も祝日で週末も特に予定がなかったので、結構暇ができました。で、何をしようかなと考えたのですが、最近はずっと前に買ってまだ読み終わっていないPerl本で勉強をしているので、Perlの開発環境を整えようかと。


私が一応使えるよと言えるレベルの言語は、PerlJavaABAP*1です。基本的に、PerlEmacsMeadow)で、JavaEclipse上で組んでいます*2。で、Meadowの環境は、大学のときにある程度整えていたのですが、この質問を見てもっと便利なやつがないかを調査調査。

今までデバッグ環境というものにあまりこだわったことがなくて、Meadowで書いてコマンドプロンプトデバッグという作業環境だったが、Meadowsvnクライアント(psvn)入れた勢いにのってperlデバッグMeadowでやってみようと。

いろいろ目についたけど、これかな。mode-compile.elっていうやつ。キー一発で、別ウィンドウ開いてコンパイルし、そのウィンドウからまたキー一発でエラーの行までジャンプ。Perlだけでなく、他の言語にも対応しているみたい。


.emacsの設定は、ほぼリンク先のまま。キーバインドを「\C-cc」から「\C-c\C-c」に変更したぐらい。あ、あと以前からcperl-modeは使っていたけど、こちらの方がスマートだったので、変更。

;; perl-mode -> cperl-mode
(defalias 'perl-mode 'cperl-mode)

;; mode-compile
(autoload 'mode-compile "mode-compile"
   "Command to compile current buffer file based on the major mode" t)
(global-set-key "\C-c\C-c" 'mode-compile)
(autoload 'mode-compile-kill "mode-compile"
   "Command to kill a compilation launched by `mode-compile'" t)
(global-set-key "\C-ck" 'mode-compile-kill)

あとは、mode-compile.elをダウンロードしてきて、適当にsite-lispにでも突っ込むと完成!…なはずですが、なぜか動かない…。


コマンド実行時のエラーメッセージを見てみると、以下のようなログが。

C:/cygwin/bin\perl.exe -w d:/MyDocuments/study/BeyondThePerl/helloWorld.pl
/usr/bin/sh: C:/cygwin/binperl.exe: No such file or directory

どうやら、「C:/cygwin/bin\perl」のバックスラッシュが単なるエスケープ文字に変わって「C:/cygwin/binperl」になっているみたい。ただ、悲しいかな、Emacs Lispの知識がなさ過ぎて、これをどうやって正しい文字列に直すのかは不明。


苦し紛れに、絶対パスPerlコマンドを指定するのではなく、(環境変数$PATHが正しく設定されているものとして)ダイレクトにPerlを実行するように。つまり、「C:/cygwin/bin\perl」→「perl」と修正。環境変数が事前に正しく設定されていれば、これで動くでしょう。


ダウンロードしてきたmode-compile.pl内の該当箇所を変更。具体的には、「shcmd」に「C:/cygwin/bin\perl」が、「shell」に「perl」が入っているので、「shcmd」→「shell」に。

(run-cmd (concat shcmd " " dbgflags " " shfile " "
                 (setq mc--shell-args
                       (read-string (if mode-compile-expert-p
                                        "Argv: "
                                      (format "Arguments to %s %s script: "
                                              shfile shell))
                                    mc--shell-args)))))

から

(run-cmd (concat shell " " dbgflags " " shfile " "                          
                 (setq mc--shell-args
                       (read-string (if mode-compile-expert-p
                                        "Argv: "
                                      (format "Arguments to %s %s script: "
                                              shfile shell))
                                    mc--shell-args)))))

かなりバッドノウハウ的な手法ですが、なんにせよ、これで開発が少しやりやすくなりました。ちょっとレベルアップですね♪


開発環境2.0なんて言う勇気はありません。世間の人から見たら、2.0どころか0.5にすらなっているかどうかも怪しいぐらい、まだまだ未成熟な環境でしょうから…orz


続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール

続・初めてのPerl - Perlオブジェクト、リファレンス、モジュール

*1:仕事で使い始めたばっかりなので、まだまだ…

*2:ABAPは家で勉強することはほぼ無いに等しいので、環境構築などはしていません