package fooBar; use strict; my $m_Self; my $m_LastError = ""; sub new { my $type = @_; $m_Self = {}; bless $m_Self, $type; return $m_Self; } sub iAmfooBar { #public return run("fooBar"); } sub __foo { #private my $name = shift; if (ref($name)) { my $self = $name; if (ref($self) ne __PACKAGE__) { $m_LastError = "Access to private method denied."; return -1; } } #print "name: $name\n"; # if ($_[0] eq $m_Self) { # $m_LastError = "Access to private method denied."; # return -1; # } #my $name = shift(@_); print "Hello $name.\n"; return 0; } sub GetLastError { return $m_LastError; } sub run {#public, but can also be called from this package. if ($_[0] eq $m_Self) { shift(@_); } my $name = shift(@_); return __foo($name); } 1;