hyukiさんとotsuneさんあたりの間で話題に上っていたので触ってみた。Perlソースコード整形ツール。
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すると差が歴然。良い。
コメント (2)
昨日はメッセ返事できなくてすみません>
ケータイでした.
さて,Perltidyの設定ファイルby damianがO'reillyの"Perl Best Practice"付属サンプルに収録されています.なんか色々いじってあります.
あとデフォルトでSTDOUTです.
http://examples.oreilly.com/perlbp/
からソースを落として解凍後,
mv perltidyrc .perltidyrcでいけたかとおもいます.
投稿者: hiroyuki | 2007年06月17日 23:57
へえー ありがとう
best practiceはマジ良著だね 読んでないとやばいかな。
投稿者: negipo | 2007年06月18日 00:44