use strict; use warnings; package BaseClass; sub new { return bless {}, shift; } sub useVirtualX { my ($self) = @_; return $self->GetX (); } 1; package main; use base 'BaseClass'; my $obj = main->new (); my $privateX = 42; print $obj->useVirtualX (); sub new { return shift->SUPER::new (); } sub GetX { return $privateX; } #### 42