Все просто: Net :: SSH2 не возвращает ссылку на хеш, но благословенный скаляр:
use Scalar::Util qw(reftype);
print reftype($self) . "\n"; # SCALAR
Кстати: всегда опасно полагаться на детали реализации стороннего кода.
Возможное решение - использовать наизнанку объекты:
package Foo;
use Scalar::Util qw( refaddr );
use base qw( Net::SSH2 );
my %keys;
sub new {
my ( $class, %args ) = @_;
my $self = $class->SUPER::new ( %args );
$keys{ refaddr ( $self ) } = 'value';
bless $self, $class;
return $self;
}