クロージャが簡単につくれていいなと思った。

% cat hoge.pl
$counter1 = makecounter();
$counter2 = makecounter();
printf "counter1 = %d\n", $counter1->();
printf "counter1 = %d\n", $counter1->();
printf "counter2 = %d\n", $counter2->();
printf "counter1 = %d\n", $counter1->();
printf "counter2 = %d\n", $counter2->();

sub makecounter{
  my $count = 0;
  sub{
    $count++;
  }
}
% perl hoge.pl
counter1 = 0
counter1 = 1
counter2 = 0
counter1 = 2
counter2 = 1

test