package Add; use strict; use warnings; sub new { my $class = shift; my $self = { ACC => undef, }; my $closure = sub { my $field = shift; if (@_) { $self->{$field} = shift; } return $self->{$field}; }; bless ($closure,$class); return $closure; } sub acc { &{ $_[0] }("ACC", @_[1 .. $#_]) } sub add { acc( $_[0],acc( $_[0] )+@_[1 .. $#_] ); } 1;