Perlの綺麗な始め方は?

特に意味ないです。

Perl コードを書くとき、↓ のようなテンプレートから mainサブルーチンを書くようにしてました。

#!/usr/bin/perl
use strict;
use warnings;

#スタートアップ・コード
sub main
{
  my @argv = @_;
  
  print "Content-type: text/plain;charset=utf-8\n\n";
  print "ほげほげ\n";
}

#その他のコード
sub func
{
  1;
}
#スクリプト実行開始
main(@ARGV);
#スクリプト実行終了

ファイルの最後でmain をコールすることで、Cとかのmain関数を真似て、自己満足してたんですが・・・

なんか最後に main をコールするところが、ちょっと格好悪く感じて、他に良い書き方ないかな~、と模索してました。バカでしょ(^^;;;

で、最近 jQuery を使ってjavascriptコードを組むことが多いので、その作法にならって、下記のようにしてみた。

use strict;
use warnings;

#スタートアップコード
&{
  sub
  {
    my @argv = @_;
    print "Content-type: text/plain;charset=utf-8\n\n";
    print "ほげほげ\n";
  }
}(@ARGV);

#その他のコード
sub func
{
  ...
}

main というCの名残が消えてしまいましたが・・・、ちょっとスッキリ! ^^

それと、Perlモジュールを作るとき、たとえばコンストラクタ(new)で以下のようにハッシュをクラスに関連づけることが多いのですが、

sub new
{
  my $param = shift;
  my $class = ref($param) || $param;
  my $this = { x => [], y => {} };

  bless($this ,$class);

  return $this;
}

問題は、そのゲッターとかセッター。
$this->{x} とか $this->{y} とかでアクセスするのはちょっと頂けない。とはいいつつ、例えば、

sub x { return shift->{x};}
sub y { return shift->{y};}

とかやるのは正直面倒。最近知ったのですが(^^;;; caller という関数が使えば・・・

sub getter {
  my @name = split(/::/,(caller 1)[3]);
  return shift->{pop @name};
}
sub x { return shift->getter;}
sub y { return shift->getter;}

#追記  ↑より↓の方がコピペしなくていいかもネ。あってんのかな?
no strict 'refs';
foreach my $name_(qw/x y/)
{
  *{__PACKAGE__.'::'.$name_} = sub { return shift->{$name_};}
}

という方法で・・・・、あ、Class::Accessor 使えば良かったんだ。。。orz