The Foo is Happy #### use Data::Dumper; package rule; sub name {my $self=shift; $self->[0]=shift if @_; $self->[0] }; sub value {my $self=shift; $self->[1]=shift if @_; $self->[1] }; package the; use overload '""'=>sub{Data::Dumper::Dumper shift}; package main; sub the(&$) { my ($item,$rule)=@_; return bless {item=>&$item,rules=>{$rule->name=>$rule->value}},"the" unless UNIVERSAL::isa($item,"the"); $item->{rules}->{$rule->name}=$rule->value; return &$item } sub is($) { return bless [is=>shift],'rule'; } print the {foo} is 'happy' or die die die;