小编zdm*_*zdm的帖子

perl重载连接运算符(".")问题

请帮助我理解,为什么引用计数是每个连接的增长?我在重载sub中返回相同的对象,并期望refcount保持不变.但是,似乎每次perl克隆和存储对象.为什么以及如何避免这种情况?

此外,我期待,该对象将在退出范围后被销毁,但由于非零引用计数,它仅在全局销毁阶段销毁.这看起来像是内存泄漏.

#!/usr/bin/env perl

use strict;
use warnings;
use Devel::Refcount qw[refcount];

package AAA {
    use Devel::Refcount qw[refcount];

    use overload
      '.' => sub {
        print 'CONCAT, REFCOUNT: ', refcount( $_[0] ), "\n";

        # return AAA->new;
        return $_[0];
      },
      fallback => 0;

    sub new { return bless {}, $_[0] }

    sub DESTROY { print "DESTROY\n" }
}

print "--- start\n";

{
    my $o = AAA->new;

    my $s = '1' . ( '2' . ( '3' . ( '4' . ( '5' . …
Run Code Online (Sandbox Code Playgroud)

perl

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

草莓perl + Inline :: CPP + <sstream>未编译

也许有人可以帮我理解.为什么会出现此错误.我正在尝试构建使用Inline :: CPP的C++代码.

这是一个例子:

#!/usr/bin/env perl

package main v0.1.0;

use strict;
use warnings;

use Inline(
    CPP => <<'CPP',
#undef seekdir

#include <sstream>
CPP
    # ccflags           => '-std=c++11',
    ccflags           => '-std=gnu++11',
    clean_after_build => 0,
    clean_build_area  => 0,
);

1;
__END__
Run Code Online (Sandbox Code Playgroud)

这段代码在linux下编译没有错误,但在草莓perl 5.26.2 x64下它会产生以下错误:

"D:\devel\perl\perl\bin\perl.exe" -MExtUtils::Command -e mv -- _2_pl_0f1f.xsc _2_pl_0f1f.c
g++  -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields  -xc++ -c  -I"D:/downloads/cpp-adaptive/cppAdaptive2/inline-src" -std=gnu++11 -s -O2   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"  "-ID:\devel\perl\perl\lib\CORE"   _2_pl_0f1f.c
In file included from _2_pl_0f1f.xs:11:0:
D:\devel\perl\perl\lib\CORE/perl.h:3544:45: error: …
Run Code Online (Sandbox Code Playgroud)

c++ perl

6
推荐指数
1
解决办法
130
查看次数

标签 统计

perl ×2

c++ ×1