こんなんをやると変数を隠蔽しつつ、横断的に変数をもてるけど、
my ( $inc_cref, $get_counter_cref ) = var_share_closure(); $inc_cref->() foreach ( 0 .. 5 ); print $get_counter_cref->() . "\n"; sub var_share_closure { my $count = 0; return ( sub { $count++ }, sub { $count } ); }
6
変数を二つ返すのがなんとなく微妙な気もするので、どうせだったら、クラスにでもすればいいのかな。
my $counter = Counter->new; $counter->countup for ( 0 .. 3 ); print $counter->get_counter; package Counter; sub new { my $pkg = shift; bless { counter => 0 }, $pkg; } sub countup { shift->{'counter'}++; } sub get_counter { shift->{'counter'}; }
4
みたいな?
でも、
$counter->{'counter'};
ってやったら丸見えなような気もするなあ。見えないほうがいいなあ。