# Use a sub to generate closures to be used as settable counters. sub new_counter { my $c = 0; sub { $c++; \$c } } my $c1 = new_counter; print '$c1: ' . ${$c1->()}, "\n" for 1..3; ${$c1->()} = 0; print '$c1: ' . ${$c1->()}, "\n" for 1..3; ${$c1->()} = 99; print '$c1: ' . ${$c1->()}, "\n" for 1..3; # Slightly less unwieldy syntax... my $c2 = new_counter; print '$c2: ' . ${&$c2}, "\n" for 1..3; ${&$c2} = 0; print '$c2: ' . ${&$c2}, "\n" for 1..3; ${&$c2} = 99; print '$c2: ' . ${&$c2}, "\n" for 1..3;