相关疑难解决方法(0)

perl:为什么Devel :: Refcount :: refcount和Devel :: Peek :: SvREFCNT不一致?

我正在阅读如何访问Perl哈希的引用计数?,并有两个Devel::Refcount::refcountDevel::Peek::SvREFCNT提出了建议.

但他们没有返回相同的引用计数.这是为什么?

这是一个修改过的例子perldoc Devel::Refcount:

use Devel::Peek;
use Devel::Refcount;

my $anon = [];

printf "Anon ARRAY $anon has %d/%d reference\n",
    Devel::Refcount::refcount($anon),
    Devel::Peek::SvREFCNT($anon);

my $otherref = $anon;

printf "Anon ARRAY $anon now has %d/%d references\n",
    Devel::Refcount::refcount($anon),
    Devel::Peek::SvREFCNT($anon);
Run Code Online (Sandbox Code Playgroud)

打印出:

Anon ARRAY ARRAY(0x8b10818) has 1/1 reference
Anon ARRAY ARRAY(0x8b10818) now has 2/1 references
Run Code Online (Sandbox Code Playgroud)

注意最后2/1的差异......

(如果事实证明我没有做一些愚蠢的事情,我会添加一个链接,如何访问Perl哈希的引用计数?到这里)

perl

15
推荐指数
2
解决办法
513
查看次数

如何跟踪对Perl对象的引用?

我正在尝试修复我的代码以使Perl能够通过削弱引用和打破周期来恢复不需要的数据.

我最近问了一个关于如何访问Perl引用计数的问题,答案对我来说效果很好.

对于我的一些对象,引用计数> 1,我不知道为什么.

有没有办法让我添加一个回调或什么来帮助我知道引用计数何时递增?我想知道谁在引用一个对象.

perl memory-management

7
推荐指数
1
解决办法
233
查看次数

在perl中使用\和{},[]引用变量有什么区别?

下面的代码工作正常,但如果我替换push @array,{%hash},push @array,\%hash那么它没有.有人可以帮我理解差异.我相信{%hash}是指匿名哈希.这是否意味着匿名哈希的寿命比对命名哈希(\%hash)的引用要长.

use strict;
use warnings;
use Data::Dumper;
my @array;
my %hash;
%hash = ('a' => 1,
         'b' => 2,
         'c' => 3,);

push @array,{%hash};

%hash = ('e' => 1,
         'f' => 2,
         'd' => 3,);

push @array,{%hash};

print Dumper \@array;
Run Code Online (Sandbox Code Playgroud)

产量

$VAR1 = [
          {
            'c' => 3,
            'a' => 1,
            'b' => 2
          },
          {
            'e' => 1,
            'd' => 3,
            'f' => 2
          }
        ];
Run Code Online (Sandbox Code Playgroud)

更新 以下是我正在处理的实际代码.我认为在这种情况下,参考的副本是我认为唯一可行的解​​决方案.如果我错了,请纠正我.

use …
Run Code Online (Sandbox Code Playgroud)

perl

3
推荐指数
1
解决办法
219
查看次数

标签 统计

perl ×3

memory-management ×1