Perlは書き殴りたいときに使うのか
コード生成はPerlに限るのは、何故。というのは、汚く書くのに抵抗が少ない、というのはどうだろうか。RubyやPythonでは、汚く書くと、罪の意識を感じてしまうのだけど、Perlにはそれがない。と。
Perlは、
と、いったのをぐちゃぐちゃに混ぜてしまうことができる。もちろん、Rubyでも不可能というわけではないんだけど、なんというか、懐の広さというべきか。Perlには、なんか、それを許してしまう魔力がある。
気分が乗ってさえいれば、「関数型Objective-elsifだらけのバッチ処理。でも中身は全部正規表現でやってますっ」と、いったコードだって、書けてしまうわけだ。いや、さすがにそれは無理だけど。
んで、コード生成やら、テスト生成は、大体書き捨てなので、そういうぐちょぐちょ書きたい気持ちとあいまって、Perlで書いてしまうんだろう。とか、そういう適当な話。
俺流Perlスクリプトの書きかた
目的がawkの延長みたいな感じなので、そのまま書く。ここで一回はelse ifを書く
while ( <> ) { if ( /.../ ) { .... } elsif ( /.../ ) { .... } elsif ( /.../ ) { .... } }
それだけでは足りないと気付いて、グローバル変数が生まれる
my @nanika; while ( <> ) { if ( /.../ ) { ....; push( @nanika, ... ); } elsif ( /.../ ) { ....; push( @nanika, ... ); } elsif ( /.../ ) { .... } } foreach( @nanika ) { }
それだけでは足りないと気付いて、配列に配列をつっこむ。ここらへんで[ ... ]が配列ではなくてリファレンスになるので悩む。配列とリファレンスがわからなくなるっていうか、$@と@$はどっちが正しいのかいつも迷う。
my @nanika; while ( <> ) { if ( /.../ ) { my @are = [..] ; ....; push( @nanika, \@are ); } elsif ( /.../ ) { ....; push( @nanika, ... ); } elsif ( /.../ ) { .... } } foreach( @nanika ) { }
それだけでは足りないと気付いて、適当にオブジェクトが生まれる
my @nanika; while ( <> ) { if ( /.../ ) { my $are = {..}; &func($are) ; ....; push( @nanika, $are ); } elsif ( /.../ ) { ....; push( @nanika, $obj ); } elsif ( /.../ ) { .... } } foreach( @nanika ) { }
大体ここらへんで機能は十分になるので、あとは触らないようにする。