print "Values: ", join ", ", $self->get_value1, $self->get_value2, $self->get_value3"; print "\nValues: "; { local $, = ", "; print $self->get_value1, $self->get_value2, $self->get_value3"; print "\nValues: ".$self->get_value1, $self->get_value2, $self->get_value3"; # notice the . after "\nValues: " } #### use v5.14; use strict; use warnings; package Test { sub new { my $scalar = $_[1]; bless \$scalar, shift } sub value { ${ $_[0] } = $_[1] if @_ > 1; ${ $_[0] } } } package CallerHash { sub TIEHASH { return bless \$_[1], $_[0]; } sub FETCH { my $obj = ${ +shift }; my $method = shift; return $obj->$method(); } sub STORE { my $obj = ${ +shift }; my $method = shift; $obj->$method(@_); } } my $obj = Test->new(4); tie my %objAsHash, CallerHash => $obj; say "$objAsHash{value}"; $objAsHash{value} = 42; say "$objAsHash{value}"; say $$obj;