use strict; use warnings; use 5.10.0; # ======================================== # class definition # ======================================== { package Class; use Carp qw/cluck/; use Data::Dump qw/pp dd/; # ----- constructor sub new { my ($class,@init)=@_; return bless {@init}, $class; } # ----- private methods my $private = sub { my ($self) = @_; cluck "I'm a PRIVATE METHOD of OBJ= " . pp $self ; }; # ----- public methods sub public { my ($self) = @_; cluck "I'm a PUBLIC METHOD of OBJ= " . pp $self ; warn " ... calling private methods...\n"; $self->$private(); } } # ======================================== # demo # ======================================== package main; my $obj = Class->new( ID => 1 ); my $obj2 = Class->new( ID => 2 ); $obj->public; $obj2->public; $obj->private; # fails #$obj->$private; # doesn't compile