我正在创建一个基类为Net::SSH2
的子类。当我试图添加一个类变量时,我收到错误说 -
不是F:\ temp \ fooA.pl第17行的HASH引用。
如果我在Net::SSH2
之前做同样的事情那么它就可以了。
以下是代码:
use strict;
my $x = Foo->new();
package Foo;
use base qw (Net::SSH2);
sub new {
my ($class, %args) = @_;
my $self = $class->SUPER::new(%args);
$self->{'key'} = 'value';
bless $self, $class;
return $self;
}
答案 0 :(得分:5)
这很简单:Net :: SSH2不会返回散列引用,但是有一个祝福的标量:
use Scalar::Util qw(reftype);
print reftype($self) . "\n"; # SCALAR
BTW:依赖第三方代码的实施细节总是很危险。
一种可能的解决方案是使用内外对象:
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;
}