汚染されないメンバ変数。
前々からperl打ちながら、クラスのメンバ変数が
外部から汚染されやすい仕組みをどうにか出来ないかなぁ…と思ってたのですが。
ある日、クロージャ使えばなんとかなるんじゃない?と気付いて
試してみよーと思いつつも、実験する時間がなかったのでした。
てな訳で、今朝どーしてもやってみたくなったので、少し実験。
って、もう誰かやってるんだと思うけど
自分で実装してみないと気が済まない性格なんで、ご勘弁ー。
・Test.pm
package Test;
sub new {
my $me = shift;
my $_name = '';
bless {
'name' => sub {
my $value = shift || undef;
if (defined $value) {
$_name = $value;
} else {
return $_name;
}
}
}, $me;
}
sub name {
my $me = shift;
my $value = shift || undef;
return $me->{'name'}($value);
}
1;
・test.pl
#!/usr/bin/perl -w
use strict;
use Test;
my $objTest = Test->new();
$objTest->name('anigon');
print $objTest->name;
exit;
・・・長いなぁ、sub new んところ。
なんかもっとうまくまとめられそうな気がするんだけどなぁ。