gpt4 book ai didi

perl - Perl 包实例可以维护不同的变量值吗?

转载 作者:行者123 更新时间:2023-12-02 08:36:14 26 4
gpt4 key购买 nike

我的目标是使用相同的代码来维护单独的变量堆栈。真正的子需要调用多次,每个实例都有自己的数组。我尝试面向对象的解决方案失败了:

package pkg_magic;
sub new{my $pkg={}; bless $pkg; return $pkg;}

my $keep;
sub set{my $self=shift; $keep=shift;}
sub show{my $self=shift; print"$self $keep\r\n";}
1;

调用两次:

#!/usr/bin/perl
use strict;
use warnings;

push(@INC,".");
use pkg_magic;

my $inst1=pkg_magic->new;
$inst1->set("inst1");
$inst1->show();
my $inst2=pkg_magic->new;
$inst2->set("inst2");
# call first instance, not second
$inst1->show();
exit;

给出输出:

pkg_magic=HASH(0x2020f88) inst1
pkg_magic=HASH(0x2020f88) inst2

很明显,到达了同一个子对象,即使它被称为不同的对象。如果我将包代码复制到单独的文件并重命名 subs(set1、set2 等),一切都会按预期工作,所以我只是想简化代码维护。我是不是遗漏了上面的内容,还是走错了方向?

最佳答案

包级变量只能有一个(全局)值,但是,如果将它移到实例 hashref 中,那么每个实例都可以有自己的值:

package pkg_magic;
sub new{my $pkg={}; bless $pkg; return $pkg;}

sub set{my $self=shift; $self->{keep}=shift;}
sub show{my $self=shift; print"$self $self->{keep}\r\n";}
1;

关于perl - Perl 包实例可以维护不同的变量值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186476/

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