in reply to Need help with OO perl

In test2::new, you say:

my $lib = test1->new(); ($self->{lib}) = ($lib->print_name());

That doesn't cause any error, but it doesn't do what you want it to do. It leaves $self->{lib} == 1, which is what print returns at the end of test1::print_name.

Later, in test2::get_name, you try to use $self->{lib} as an object instance, but it's still just the number 1.

I'd fix this by changing the code in test2::new to:

my $lib = test1->new(); $self->{lib} = $lib; $lib->print_name();

You could also eliminate a variable this way:

$self->{lib} = test1->new(); $self->{lib}->print_name();

You could also "fix" this by having test1::print_name return $self instead of the value of print

sub print_name { my $self = shift; print "I forgot what went here"; return $self; }

I don't like that solution personally since the return value isn't really related to the method, but having methods return $self whenever possible is common enough.