最近使っているPerlスクリプトのひな形

Windowsのコマンドプロンプトは使いにくいので、最近は使っているエディタからスクリプトを起動することが多いのだが、utf8で書いたコードは文字化けして読めない。
まあ、設定があるのかもしれないけど。
あと、同じく設定があるとは思うのだけど見つからないのが、新規ファイルの文字コードの指定。
新規ファイルを作るとANSIになってしまって、うっかり保存すると日本語が化けた状態で保存されてしまう。
で、今のところ、そのどちらもカバーするようなひな形を作って、そこからスクリプトを書いていくようにしている。
そのひな形は以下のとおり。

1
2
3
4
5
6
7
# utf8
use strict;
use warnings;
use YAML qw (Dump);
sub p (@) { print Dump(@_); }
use utf8;
binmode STDOUT => ':encoding(cp932)';

とりあえず、1行目は全角文字で書いてある「utf8」によって、開いた時にファイルの文字コードを「BOMなしのutf8」として認識してくれる。
strictとwarningsは、ないと気持ち悪いので、とりあえず書いておく。
で、データの確認用としてYAMLを使っている。
以前はData::DumperをIndent=1して使っていた。
YAMLは、慣れるまでは配列とハッシュの階層の感覚がよくわからない事もあるが、記号が少なくて見やすいのでこっちにした。
なにより、文字がエスケープされないのが良い。
で、binmodeに引数を加えることで、標準出力へ出す文字列はすべてcp932(機種依存ありのShift_JIS?)に変換してから出力する。
こうすると、エディタの出力ペインにも文字化けせずに表示される。
使ってみた例がこれ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# utf8
# http://wiki.bit-hive.com/tomizoo/pg/Perl%20%BD%CB%C6%FC%CC%BE%A4%CE%BC%E8%C6%C0
use strict;
use warnings;
use YAML qw (Dump);
sub p (@) { print Dump(@_); }
use utf8;
binmode STDOUT => ':encoding(cp932)';
use Calendar::Japanese::Holiday;
# 祝日一覧の取得
my $holidays;
p $holidays = getHolidays(2008, 5);
p $holidays = getHolidays(2008, 5, 1);
foreach my $month ( 1 .. 12 ) {
    $holidays = getHolidays(2009, $month, 1);
    p { month => $month, holidays => $holidays };
}
# 祝日かどうかの判定
p my $name = isHoliday(2007, 5, 5);
comments powered by Disqus
Hugo で構築されています。
テーマ StackJimmy によって設計されています。