$ perl -Mstrict -Mwarnings -le '
package Parent;
sub new { bless {} => $_[0] }
sub call { $_[0]->char }
sub char { "parent" }
package Son;
use base "Parent";
sub char { "son" }
package main;
my $parent_obj = Parent->new;
print "Parent object char = ", $parent_obj->call;
my $son_obj = Son->new;
print "Son object char = ", $son_obj->call;
'
Parent object char = parent
Son object char = son
####
$ perl -Mstrict -Mwarnings -le '
package Parent;
sub new { bless {} => $_[0] }
sub call { $_[0]->char }
sub char { ref $_[0] }
package Son;
use base "Parent";
package main;
my $parent_obj = Parent->new;
print "\$parent_obj class = ", $parent_obj->call;
my $son_obj = Son->new;
print "\$son_obj class = ", $son_obj->call;
'
$parent_obj class = Parent
$son_obj class = Son
##
##
$ perl -Mstrict -Mwarnings -le '
package Parent;
sub new { bless {} => $_[0] }
sub call { $_[0]->char }
sub char { ref $_[0] }
package Son;
use base "Parent";
package Daughter;
use base "Parent";
package Grandson;
use base "Son";
package main;
my $parent_obj = Parent->new;
print "\$parent_obj class = ", $parent_obj->call;
my $son_obj = Son->new;
print "\$son_obj class = ", $son_obj->call;
my $daughter_obj = Daughter->new;
print "\$daughter_obj class = ", $daughter_obj->call;
my $grandson_obj = Grandson->new;
print "\$grandson_obj class = ", $grandson_obj->call;
'
$parent_obj class = Parent
$son_obj class = Son
$daughter_obj class = Daughter
$grandson_obj class = Grandson