Tie::Hash

ハッシュをタイする時に便利なのがTie::Hashモジュール

This module provides some skeletal methods for hash-tying classes.

そもそもハッシュをtieする時ってどんなシーン?ということでperltieを調べてみると

perltie - how to hide an object class in a simple variable

だそう。自分なりに理解すると、データの箱を用意したいが単なるハッシュでは不足、だけどオブジェクトはちょっと大げさ。こういう時にtieを使えば表面上はハッシュとして見せつつ、取得や保存時にFETCHやSTOREメソッドを噛ませることができるので、便利!てな感じです。

使い方

package NewStdHash;
use strict;
use warnings;
use Tie::Hash;
use base qw(Tie::StdHash);

sub FETCH {
    my ($self, $key) = @_;
    warn "key is $key\n";
    $self->SUPER::FETCH($_[1]);
}
1;
#!/usr/bin/perl
use strict;
use warnings;

use lib '/home/kotaro/pm';
use NewStdHash;

tie my %new_std_hash, 'NewStdHash';
$new_std_hash{test} = 'hoge';

print "$new_std_hash{test}\n"; # warnが実行されてからprintされる

まとめ

ずっとtieってどう使うんだと悩んでいたが、ようやくすっきり。