タイ(tie)関数について
タイ関数(tie)について、あまり理解できなかったので、
勉強してみたいと思います。
タイ関数の場合、タイスカラー、タイ配列、タイハッシュなど、
データの形式によってタイ関数も異なりますが、
まずはタイスカラーのケースから考えてみました。
タイスカラーの場合は、以下のメソッドが存在します。
- コンストラクタ TIESCALARメソッド
- ガーベジコレクター DESTROYメソッド
- 値を取得する FETCHメソッド
- 値を設定する STOREメソッド
DESTROYメソッドはなくても、エラーにはなりませんが、
他のメソッドは存在しない場合、エラーとなります。
例として、以下のようなケースを考えてみました。
memcachedからデータ取得をするTie::Memcachedクラス
をフックしつつ、任意のキーワードを投げて、memcachedにデータが存在すれば、
結果を受け取れるというスクリプトです。
{ package Tie::Memcached; sub TIESCALAR { my $class = shift; my $memd = shift; my $self = bless { memd => $memd }, $class; return $self; } sub FETCH { my $self = shift; return $self->{result} } sub STORE { my $self = shift; my $word = shift; $self->{result} = $self->{memd}->get($word); } 1; } { package main; use Cache::Memcached; use Data::Dumper; my $memd = new Cache::Memcached { 'servers' => ["127.0.0.1:11211"] }; tie my $scalar, 'Tie::Memcached', $memd; ## キャッシュに問い合わせするキーワード my @word_list = qw( word01 word02 word03 ); foreach (@word_list) { my $result = $scalar = $_; print Dumper($result); } 1; }