タイ(tie)関数について その2
次はタイ配列について学んでみました。
タイ配列の場合は、以下のメソッドが存在します。
- TIEARRAYメソッド コンストラクタ
- DESTROYメソッド ガーベジコレクター
- FETCHメソッド tie配列の各要素を参照しようとする場合に必要
- STOREメソッド tie配列の各要素にアクセスしようとする場合に必要
- FETCHSIZEメソッド tieした配列を参照しようとする場合に必要
- PUSHメソッド tieした配列に対してpushした場合に必要
- POPメソッド tieした配列に対してpopした場合に必要
- SHIFTメソッド tieした配列に対してshiftした場合に必要
- UNSHIFTメソッド tieした配列に対してunshiftした場合に必要
- SPLICEメソッド tieした配列に対してspliceした場合に必要
- CLEARメソッド tieした配列自体を空にする場合などに必要なメソッド
- EXTENDメソッド tieした配列を拡張する場合などに必要なメソッド
実際にどのメソッドを使うかは、タイ配列をどのように実装したいかによって異なります。
{ package TieWeight; use strict; use warnings; use YAML::Syck; sub TIEARRAY { my ( $class, $yaml ) = @_; my $self = {}; $self->{weight} = __PACKAGE__->_load_yaml($yaml); bless $self, $class; } sub FETCHSIZE { my $self = shift; return scalar( @{$self->{weight}} ); } sub PUSH { my $self = shift; my $weight = shift; push( @{$self->{weight}}, $weight ); DumpFile("weight.yaml", $self->{weight}); } sub _load_yaml{ my $self = shift; my $yaml = shift; return YAML::Syck::LoadFile( $yaml ); } } { package main; use strict; use warnings; tie my @weight_list, 'TieWeight', 'weight.yaml'; push( @weight_list , '69.5' ); push( @weight_list , '69.1' ); } # ※weight.yaml # コメントアウトをはずして使ってください。 #--- #- 68.0 #- 69.2 #- 69.5 #- 68.5 #- 68.2 #- 68.0 #- 67.5 #- 67.2 #- 66.9 #- 68.2
すごく単純な例として上記のスクリプトを作成してみました。
スクリプトを実行すると、weight.yamlに保存された過去10日間の体重データは、tie関数でロードされたTieWeightクラスによって配列に格納されます。あとは配列にどんどん新規取得した体重データをpushし、weight.yamlにdamp出力しています。
まだ、Tieを理解できているのか不安ですが、
使い込むことで慣れていけたらと思います。
勘違いなどありましたら、ご指摘いただければありがたく思います。
よろしくお願いいたします。