You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl父类构造器跨包共享哈希数据的无额外变量实现方案咨询

Perl子类间共享哈希状态的实现方案

核心思路是让所有子类实例的对象引用指向同一个共享哈希,而非每个实例创建独立哈希。这样直接通过$self->{key}就能访问共享数据,无需额外嵌套字段或单独的存储变量。

代码实现

父类 Father

package Father;

# 包内私有共享哈希,仅当前包可见
my %shared_state;

sub new {
    my ($class) = @_;
    # 将共享哈希引用bless为子类对象
    return bless \%shared_state, $class;
}

1;

子类 Son

package Son;
use base 'Father';

sub set_news {
    my ($self, $value) = @_;
    $self->{news} = $value;
}

1;

子类 Uncle

package Uncle;
use base 'Father';

sub get_news {
    my ($self) = @_;
    return $self->{news};
}

1;

测试验证

use Son;
use Uncle;

my $son = Son->new();
$son->set_news("New Perl OOP trick");

my $uncle = Uncle->new();
print $uncle->get_news(); # 输出:New Perl OOP trick

方案说明

  • 父类里的%shared_state是包内私有变量,只能在Father包内直接访问,但所有子类实例的对象都是这个哈希的引用,因此通过$self->{key}操作的就是共享数据。
  • 完全避免了额外的$store_data变量,也不需要嵌套的$self->{data}->{key}访问方式,完全匹配需求。
  • 注意:该方案下所有子类实例共享全部哈希状态,如果需要部分字段共享、部分字段独立,可以调整为共享哈希的特定键值对,但当前需求是全量共享,这个方案完全适配。

内容的提问来源于stack exchange,提问作者The nothing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:48:14