gpt4 book ai didi

Perl - 无法为子类创建类变量

转载 作者:行者123 更新时间:2023-12-05 01:34:13 25 4
gpt4 key购买 nike

我正在创建一个基类为 Net::SSH2 的子类.当我尝试添加一个类变量时,我收到错误消息 -

Not a HASH reference at F:\temp\fooA.pl line 17.



如果我在没有 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;
}

最佳答案

很简单: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;
}

关于Perl - 无法为子类创建类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7306751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com