package CodeRefObj; use strict; use warnings; sub create { my $properties = shift; my $methods = shift; my $closure = sub { my $magick = shift; # first resolve any property sets or gets if (exists $properties->{$magick}) { $properties->{$magick} = shift if @_; return $properties->{$magick}; } # next resolve any method calls, making # sure to include a ref to the %properties hash elsif (exists $methods->{$magick}) { return &{ $methods->{$magick} }($properties, @_); } else { die "Magick $magick not defined"; } }; return $closure; } 1;