タイ(tie)関数について その2

次はタイ配列について学んでみました。

タイ配列の場合は、以下のメソッドが存在します。

  1. TIEARRAYメソッド コンストラク
  2. DESTROYメソッド ガーベジコレクター
  3. FETCHメソッド tie配列の各要素を参照しようとする場合に必要
  4. STOREメソッド tie配列の各要素にアクセスしようとする場合に必要
  5. FETCHSIZEメソッド tieした配列を参照しようとする場合に必要
  6. PUSHメソッド tieした配列に対してpushした場合に必要
  7. POPメソッド tieした配列に対してpopした場合に必要
  8. SHIFTメソッド tieした配列に対してshiftした場合に必要
  9. UNSHIFTメソッド tieした配列に対してunshiftした場合に必要
  10. SPLICEメソッド tieした配列に対してspliceした場合に必要
  11. CLEARメソッド tieした配列自体を空にする場合などに必要なメソッド
  12. 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を理解できているのか不安ですが、
使い込むことで慣れていけたらと思います。

勘違いなどありましたら、ご指摘いただければありがたく思います。
よろしくお願いいたします。