$self->debug_level( 4 ); print "Original: ", \$self->debug_level, " Value: ", $self->debug_level, "\n"; my $obj = Something->new( { 'debug_level' => \$self->debug_level, } ); print "Reference: ", $obj->debug_level, " Value: ", ${$obj->debug_level}, "\n"; $self->debug_level( 0 ); print "After change:\n"; print "Original: ", \$self->debug_level, " Value: ", $self->debug_level, "\n"; print "Reference: ", $obj->debug_level, " Value: ", ${$obj->debug_level}, "\n"; #### Original: SCALAR(0xd463da0) Value: 4 Reference: SCALAR(0xd468640) Value: 4 After change: Original: SCALAR(0xd463da0) Value: 0 Reference: SCALAR(0xd468640) Value: 4 #### has 'debug_level' => ( traits => [qw(Getopt)], is => 'rw', isa => 'Int', default => 0, cmd_aliases => 'd', documentation => 'Debug mode: 0-4; Default: 0;' ); #### has 'debug_level' => ( is => 'rw', isa => 'ScalarRef[Int]', ); #### my $obj = Something->new( { # Before: #'debug_level' => \$self->debug_level, # Now: 'debug_level' => \$self->{'debug_level'}, } );