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