perlには、変数の代入/参照が行なわれた際に実行する関数を結びつける機能があります。
この機能を実現するためにtie関数を使用します。
例えば、MyScalarモジュールと$scalar変数を結びつけるには次のように記述します。
tie $scalar, MyScalar;
MyScalarに実行するメソッドを定義していきます。
例えば、変数への代入の際に実行する関数は、STOREというメソッド名で定義します。
変数の参照の際に実行する関数は、FETCHというメソッド名で定義します。
こういったメソッドは、必ず一通り定義しなければなりません。
そこで、Tie::Scalarというモジュールを継承するようにして、自分が定義したいメソッドだけ記述できるようにします。
package MyScalar; use strict; use warnings; require Tie::Scalar; @ISA = qw/Tie::StdScalar/; 1;
上記の定義で、MyScalarはスカラー変数にtieするモジュールとして機能するようになります。
独自の実装したい場合は、オーバーライドします。
代入する毎に値を表示するにはSTOREメソッドをオーバーライドします。
package MyScalar; use Carp; require Tie::Scalar; @ISA = qw/Tie::StdScalar/; sub STORE { my ( $this, $value ) = @_; carp "$$this -> $value"; $$this = $value; } 1; package main; use strict; use warnings; use MyScalar; tie my $scalar, 'MyScalar'; $scalar = 1; $scalar = 2;
スカラー以外の変数にtieするモジュールも作成できます。
そのときには、Tie::Array、Tie::Hash、Tie::Handleをベースクラスとして使用できます。
参考
- perl - tie()って何をtieするの?
- 第14章
- 作者: ラリーウォール,ジョンオーワント,トムクリスチャンセン,Larry Wall,Jon Orwant,Tom Christiansen,近藤嘉雪
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2002/09
- メディア: 単行本
- 購入: 8人 クリック: 209回
- この商品を含むブログ (126件) を見る