前後のエントリ

2007年10月23日(火)

Eclipse+EPIC、utf8でperlスクリプトを書くと構文検証機能が変だ

以前からEclipseに興味はあったものの、英語だからなぁなんて敬遠していました。 Pleiades(プラグイン日本語化プラグイン)という極めて有用な神のプラグインを知ってから言語の壁がとても低くなったので、ちょっと触って勉強しています。 で、基本的にJavaの開発環境ではあるのですが、PerlやRubyやPHPのスクリプトを書くこともできます。 ブレークポイントで止めて変数の内容を見るとか、そこからステップ実行とか、いまいち言語を理解できていなくても簡単なプログラムは書けちゃいそうな機能が揃っています。

手始めにPerlに挑戦しようと思ってEPICというPerl用プラグインを入れてみました。 EPICが提供するPerlエディタにはオン・ザ・フライな構文検証機能が付いていて便利なんですが、この機能がどうも日本語に弱い。 例えば、

print "字";

というコードを書いてutf8で保存すると、自動的に構文検証機能が働いて、「Can't find string terminator '"' anywhere before EOF」というエラーが表示されます。 大丈夫な文字もあるんですが、ダメな文字も多いです。 で、これがエラーなのかと思うと実行はちゃんとできるんです。 Eclipseのデバッグ環境でも、chcp 65001したコマンドプロンプトでも、問題なく正常に動きます。 構文検証だけがおかしいみたい。 ググってもそのものズバリな情報が出てこないなぁ。 探し方が悪いのか、入力も出力もutf8なperlスクリプトなんて誰も書かないのか。 utf8なXMLを読んでWeb用にutf8で出すなんてやりそうだと思うんだけど。 しょうがないからソースでも当たってみるかー。

Eclipseのpluginsディレクトリにorg.epic.source_0.6.17/src/org.epic.perleditor_0.6.10/src.zipなるとてもそれらしいファイルを発見。 展開するとこれはまさしくソースコード。 まあ、Javaのコードを書けない人間がJavaのコードを読んだところで役には立たないのですが。 当てずっぽうでorg/epic/perleditor/editors/util/PerlValidator.javaに違いないと思って探りを入れ、PerlValidatorBase.java → org/epic/core/util/PerlExecutor.java → ProcessExecutor.javaあたりまで見に行ってみて、雰囲気としては「perl -c」を実行し、こいつの標準入力めがけて「今エディタにある内容」の文字列を喰わせるという処理みたい。 標準入力をutf8にすれば解決しそうなんだけど、どうやらProcessExecutorのコンストラクタにcharsetNameを渡してあげればいいんじゃないかという感じ。 でも、その上のPerlExecutorをPerlValidatorBaseで作るときにcharsetNameを考えてないぽい。 charsetNameが渡ってこないから、最終的にはシステムのデフォルトエンコーディングで標準入出力が開かれる。 日本語環境のWindowsだとシステムデフォルトはShift-JISなのかな。 このShift-JISと思われる標準入力パイプに無理やりutf8な文字列を流し込むもんだから、向こうで口開けて待ってるperl -cもびっくりしちゃうわな。 ソースファイルがutf8なら標準入出力もutf8でいいような気もするけど、そうでもないような気もするので、これはとりあえずどうしようもないのかも。

だったらシステムデフォルトをutf8にすればいいのよ!

いや、かなり問題あると思うけど、EPICでperl開発する間だけeclipse.iniを置き換えればいいかなと。 eclipse.iniに「-Dfile.encoding=UTF-8」を追加←結論。 将来的にはソースファイルのエンコーディングを見るとか、EPICの設定でValidate時の標準入出力パイプエンコーディングを設定するとかしてもらいたいと思います。 ちなみにBug Reportsの1756061がまさにこのことであるような気がします。

そもそも標準入力にパイプでデータ突っ込むのが間違いであって、「今エディタにある内容」を一時ファイルに吐き出して、その一時ファイルをperl -cに評価してもらえば万事解決なんじゃないかなぁ。 プラグインの奥の方ではファイルシステムに書き込んだりできないとか、そういう制限があるのかなぁ。

投稿者 ミキオ | 2007-10-23(火) 21:15:29 | [ソフトウェア] | 2007年10月 | ツイートする

zenback

前後のエントリ