use strict; use warnings; use 5.010; # saving some vertical space package My::Demo; use Moose; has 'why_pass_self' => ( is => 'ro', isa => 'Str', default => 'dunno, is this ok?' ); my $self; sub BUILD { my $s = shift; $self = $s; } sub _kool_func { say $self->why_pass_self; } sub kool_func_for_users { my $self = shift; $self->_kool_func; } ##################################################################### package main; use Scalar::Util qw(refaddr); my $o1 = My::Demo->new; print "o1 ", refaddr($o1), " at says: "; $o1->kool_func_for_users; my $o2 = My::Demo->new(why_pass_self => "That's why!"); print "o2 ", refaddr($o2), " at says: "; $o2->kool_func_for_users; print "o1 ", refaddr($o1), " at says: "; $o1->kool_func_for_users;