Skip to content

Instantly share code, notes, and snippets.

@haoyayoi
Created December 8, 2009 09:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save haoyayoi/251541 to your computer and use it in GitHub Desktop.
Save haoyayoi/251541 to your computer and use it in GitHub Desktop.
Perl::Tidyで明快コーディング!
markup: Hatena
creator: haoyayoi
date: 2009-12-09T00:00:01+09:00
Perlのコードを書くとき、CPANモジュールを作成するとき、そして就職活動時のエントリーで課題のperlスクリプトを提出する時に超実益的で役立つ、Perl::Tidyを紹介してみます。
* Perl::Tidyとは
ソースコードを解析して美しく麗しいコードにしてくれる、怠け者ばかりなPerl userには欠かせないモジュールです。
* インストール
CPANからインストールします。
>|sh|
cpan Perl::Tidy
||<
Windows上でActivePerlを使っている場合は、PPMパッケージとしてインストールします。
>|sh|
ppm install Perl-Tidy
||<
* 使い方
以下のような汚いコードがあるとします。mud10years.plとでも名付けることにします。
>|perl|
use strict;use warnings;my $module="Perl::Tidy";my $user=
"haoyayoi";my $desc1=" is so coolist module.";my $desc2= " Lets try it!";my $deschash = {module=>"$module",
desc =>$desc1. $desc2,
};
print $deschash->{module}.$deschash->{desc}." by $user";
||<
このコードを実行すると、次のように出力されます。
>>
Perl::Tidy is so coolist module. Lets try it! by haoyayoi
<<
正常に出力されるのは判りました。ですが、肝心のソースコードがいびつすぎて読みづらいため、保守性にも欠けます。Perl::Tidyを使って、綺麗に整形されたコードとして出力してみます。
>|sh|
perltidy mod10years.pl -o future10years.pl
||<
これで future10years.pl というファイルが生成されました。このファイルには以下の整形された状態のコードが収まっています。
>|perl|
use strict;
use warnings;
my $module = "Perl::Tidy";
my $user = "haoyayoi";
my $desc1 = " is so coolist module.";
my $desc2 = " Lets try it!";
my $deschash = {
module => "$module",
desc => $desc1 . $desc2,
};
print $deschash->{module} . $deschash->{desc} . " by $user";
||<
すっきりと見通しがよくなりました!
* テキストエディタのマクロとしての利用
Perl::Tidyが素晴らしい整形機能を持っていることはわかりました。ですが、毎回ファイルに出力してシェルコマンドを通すのも億劫です。そこで、テキストエディタからマクロとして利用できるようにしてみます。
vimを使っているので、vimのマクロをあげてみます。
>|sh|
echo "map ,ptv <Esc>:'<,'>! perltidy<CR>" >> ~/.vimrc
source ~/.vimrc
||<
ビジュアルモードにして対象のコードを選択し、,ptvの順にキーを押すと整形処理が実行されます。非常にお手軽ですね!
EmacsやEmEditorなど、ほかにも様々なテキストエディタでも、それぞれにあわせたマクロを作成することで可能になります。
* perltidyのもう一つ機能
perltidyがソースコードを綺麗に整えてくれることはわかりましたが、これ以外にも優れた機能が存在します。オプションに -html を加えることにより、ハイライトされたHTMLドキュメントとして出力が可能です。
>|sh|
perltidy -html mud10years.pl
||<
ただし、このオプションではコードの整形は行われません。そこで、出力がSTDOUTとなる -st オプションとpipeを組み合わせて少し工夫してみます。
>|sh|
perltidy -st mud10years.pl | perltidy -html -nnn -o beautifull10years.html
||<
これで、ハイライト+行ナンバリング+整形の組み合わせが実現されたドキュメントが出力されるようになりました。
PODが含まれているモジュールを対象にする場合は、HTMLドキュメント出力時に -frm オプションも使ってみましょう。
* Best Practiceとしてのすすめ
Perl::Tidyは Perl Best Practice (PBP) なコーディングを行う上で利用推奨されています。$HOME/.perltidyrc に -pbp と書いて保存することでperltidy実行時にPBPスタイルが反映されます。
.perltidyrcには -h オプションで表示される内容が指定できるので、自分なりの設定も見つけてみましょう。
* おまけ
前日のsugyanさんが書いた記事に、記号プログラムが掲載されています。興味のある人はPerl::Tidyに通してみましょう。
* まとめ
Perlは色々な書き方ができるが故にソースコードも十人十色です。インデントの置き方からスペースのはさみ方、括弧との位置づけまでいろいろな組み合わせがあるため、ソースコードの整形だけで楽しくなってしまう人もいるかもしれません。ですが、ソースコード整形なんておまけです。整形なんてPerl::Tidyに任せて、新しいコードを書くべきです。
モジュール作成、およびplファイル作成でPerl::Tidyは役に立ちますが、それ以外でもコーディングスタイルが定まらない場合などの参考にもなります。モダンなコーディングを手にするきっかけとして、一度使用してみてはいかがでしょうか。
明日はxaicronさんです!お楽しみに!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment