マスタリングPerl (17章 タイ変数のマジック)

tieは、スカラー・配列・ハッシュ・ファイルハンドルを適切な名前を持ったメソッドを提供するクラスと結び付け、これらの変数に対する通常の処理を横取りしてエミュレートすることができる。
例えば、dbmopenのようにハッシュ変数とデータベースを結び付けるような処理が可能。

tie VARIABLE, CLASSNAME, LIST;   # VARIABLEをCLASSNAMEに結び付ける
$object = tied VARIABLE;   # tied関数でオブジェクトの取り出しができる

スカラーのタイ変数

主なメソッドは、以下の通り。

  • TIESCALAR(LIST) : コンストラク
  • FETCH
  • STORE(VALUE)
  • DESTROY

Tie::Scalar/Tie::StdScalarを継承すれば、再定義したいメソッドのみ実装すればよい。

配列のタイ変数

主なメソッドは、以下の通り。

  • TIEARRAY(LIST) : コンストラク
  • FETCH(INDEX)
  • STORE(INDEX, VALUE)
  • DESTROY
  • FETCHSIZE
  • STORESIZE(COUNT)
  • EXTEND(COUNT)
  • EXISTS(INDEX)
  • DELETE(INDEX)
  • CLEAR
  • PUSH(LIST)
  • POP
  • SHIFT
  • UNSHIFT(LIST)
  • SPLICE(OFFSET, LENGTH, LIST)

Tie::Array/Tie::StdArrayを継承すれば、再定義したいメソッドのみ実装すればよい。

ハッシュのタイ変数

主なメソッドは、以下の通り。

  • TIEHASH(LIST) : コンストラク
  • FETCH(KEY)
  • STORE(KEY, VALUE)
  • DELETE(KEY)
  • CLEAR
  • EXISTS(KEY)
  • FIRSTKEY
  • NEXTKEY(PREVKEY)
  • DESTROY

Tie::Hash/Tie::StdHashを継承すれば、再定義したいメソッドのみ実装すればよい。

ファイルハンドルのタイ変数

主なメソッドは、以下の通り。

  • TIEHANDLE(LIST) : コンストラク
  • PRINT(LIST)
  • READLINE
  • GETC
  • OPEN(LIST)
  • CLOSE
  • SEEK(LIST)
  • TELL
  • PRINTF(LIST)
  • READ(LIST)
  • WRITE(LIST)
  • EOF
  • BINMODE(DISC)
  • FILENO
  • DESTROY


補足で勉強しました。