package Wheel; # class for storing information about a Wheel use warnings; use strict; use Carp; sub new { my $class = shift; my $name = shift; my $self = { NAME => $name, }; my $closure = sub { my $field = shift; if (@_) { $self->{$field} = shift; } return $self->{$field}; }; bless ($closure,$class); return $closure; } # public accessors sub name { &{ $_[0] }("NAME", @_[1 .. $#_]) } sub accept { my $self = shift; my $visitor = shift; $visitor->visitWheel($self); } 1;