あけましておめでtie

最悪な駄洒落で2008年の幕が上がりました。


新年早々、富士山を拝んで己の矮小さを身に染みて参りました。

皆様改めてあけましておめでとうございます。マツモです。

本年の書初めはtieにしてみました。

きっかけ
http://search.cpan.org/~audreyt/selfvars/
selfvarsというモジュールを発見し、実装のコード量の少なさに驚愕した事です。
中を見るとtie!tie!tie!

というわけでやってみんといかんタイ!(地頭くん from キャプ翼)

Tie::Scalar
selfvarsの中ではTie::ScalarとTie::Arrayを使ってすっきりとまとめてありました。
という訳で今回はTie::Scalarを使ってみたよ〜。という程度です。

コード

package MyTie;
use strict;
# use base 'Tie::Scalar';はいらない。後述のtieした時点で継承される。のか?

# コンストラクタ
sub TIESCALAR {
   my $class = shift;
   my $pid = $$;
   return bless \$pid, $class;
}

# 参照した時
sub FETCH {
   my $self = shift;
   return $$self;
}

# 代入した時
sub STORE { require Carp; Carp::croak 'read only' }

そして使う方。

package main;
use strict;

our $hoge;
tie $hoge => "MyTie"; # で、$hogeにMyTieオブジェクトが突っ込まれる。(tieされる。)
warn $hoge;

以上で無事プロセスIDを出力と相成りました。

ちなみにSTOREとして定義したメソッドは

$hoge = 'fooo';

と何かを代入しようとするとcroakが発動し、

read only at tie.pl

と無事死亡してくれました。


差し当たっての有効なアイデアは思いつかないんですが、My引き出しに閉まっておくと良い事ありそうじゃないですか?