« Ruby Kaigi 2007 | main | HHK Professional2 »

Perltidy入れてみた

hyukiさんotsuneさんあたりの間で話題に上っていたので触ってみた。Perlソースコード整形ツール。


Perltidy


OS Xにインストールするには、officialのsourceforgeからUnix向けパッケージを持って来て

$ perl Makefile.PL && make && sudo make install

で普通に入る。
それではなぜかホームディレクトリにあったくそてきとうなソースを放り込んでみよう。
$ perltidy hoge.pl -o tidy.pl

hoge.pl :
$str = do $ARGV[0];

for(0..$ARGV[1]){
my $line = &MakeASentence($str);
print $line;
print "\n" if($line =~ /¥.$/);
}

sub MakeASentence{
my $str=shift;
my @hash_array = @{$str->{hash}};
my $data = $str->{data};
my $sentence_seed = $hash_array[int rand($#hash_array)];
# print $sentence_seed , "\n";

my @sentence = split /_/, $sentence_seed;
my $ret_sentence = undef;
for my $hinshi (@sentence){
my $seed = rand();
my $ratesum = 0;
for my $a (keys %{$data->{$hinshi}}){
$ratesum += $data->{$hinshi}->{$a}->{rate};
if($ratesum > $seed){
$ret_sentence .= $a;
last;
}
}
}
return $ret_sentence;
}


tidy.pl :
$str = do $ARGV[0];

for ( 0 .. $ARGV[1] ) {
my $line = &MakeASentence($str);
print $line;
print "\n" if ( $line =~ /¥.$/ );
}

sub MakeASentence {
my $str = shift;
my @hash_array = @{ $str->{hash} };
my $data = $str->{data};
my $sentence_seed = $hash_array[ int rand($#hash_array) ];

# print $sentence_seed , "\n";

my @sentence = split /_/, $sentence_seed;
my $ret_sentence = undef;
for my $hinshi (@sentence) {
my $seed = rand();
my $ratesum = 0;
for my $a ( keys %{ $data->{$hinshi} } ) {
$ratesum += $data->{$hinshi}->{$a}->{rate};
if ( $ratesum > $seed ) {
$ret_sentence .= $a;
last;
}
}
}
return $ret_sentence;
}


目diffすると差が歴然。良い。

トラックバック

このエントリーのトラックバックURL:
http://polog.org/mt-tb.cgi/370

コメント (2)

昨日はメッセ返事できなくてすみません>
ケータイでした.

さて,Perltidyの設定ファイルby damianがO'reillyの"Perl Best Practice"付属サンプルに収録されています.なんか色々いじってあります.
あとデフォルトでSTDOUTです.

http://examples.oreilly.com/perlbp/

からソースを落として解凍後,
mv perltidyrc .perltidyrcでいけたかとおもいます.

へえー ありがとう
best practiceはマジ良著だね 読んでないとやばいかな。

コメントを投稿

Powered by
Movable Type 3.34