あけましておめで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引き出しに閉まっておくと良い事ありそうじゃないですか?