タイ(tie)関数について

タイ関数(tie)について、あまり理解できなかったので、
勉強してみたいと思います。

タイ関数の場合、タイスカラー、タイ配列、タイハッシュなど、
データの形式によってタイ関数も異なりますが、
まずはタイスカラーのケースから考えてみました。

タイスカラーの場合は、以下のメソッドが存在します。

  1. コンストラクタ TIESCALARメソッド
  2. ガーベジコレクター DESTROYメソッド
  3. 値を取得する FETCHメソッド
  4. 値を設定する 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;
}