sub convert { my $re = shift; return bless \$re, __PACKAGE__; } use overload '""' => sub { ${ shift() } }; use overload '.' => \&concat; sub concat { my($self, $str, $rev) = @_; my $string = $rev ? "$str" . "$self" : "$self" . "$str"; return bless \$string, __PACKAGE__; }