{ package Parent; use Private; sub private_method { is_private; print "Private method calleed OK.\n" } sub public_method { $_[0]->private_method } } { package Child; use base 'Parent'; sub child_calling_private { $_[0]->private_method } sub child_calling_public { $_[0]->public_method } } package main; print "\nBase class: call private method directly:\n"; eval { Parent->private_method }; $@ and print $@; print "\nBase class: call public method that calls private method:\n"; eval { Parent->public_method; }; $@ and print $@; print "\nDerived class: call parent's private method directly:\n"; eval { Child->private_method }; $@ and print $@; print "\nDerived class: call parent's public method that calls private method:\n"; eval { Child->public_method; }; $@ and print $@; print "\nDerived class: call method that calls parent's private method:\n"; eval { Child->child_calling_private; }; $@ and print $@; print "\nDerived class: call method that calls parent's public method:\n"; eval { Child->child_calling_public; }; $@ and print $@;