Perlは書き殴りたいときに使うのか

コード生成はPerlに限るのは、何故。というのは、汚く書くのに抵抗が少ない、というのはどうだろうか。RubyPythonでは、汚く書くと、罪の意識を感じてしまうのだけど、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 ) { }

大体ここらへんで機能は十分になるので、あとは触らないようにする。