package foo; sub new{ my $class = shift; my $base = shift; return bless { base_class => $base }, $class; } sub write{ my $self = shift; my $base = $self->{base_class}; print eval "\$self->$base\::read"; } #### no strict 'refs'; print $self->&{"$base\::read"}; # syntax error # string found where operator expected print $self->"$base\::read"; # executes but ignores $base's inheritance, if any no strict 'refs'; print &{"$base\::read"}( $self ); #### # code above package foo unchanged package foo::alpha; BEGIN { @foo::alpha::ISA = qw( foo alpha ); } package foo::beta; BEGIN { @foo::beta::ISA = qw( foo beta ); } package foo; sub new{ my $class = shift; my $base = shift; return bless {}, "$class\::$base"; } # all other code unchanged