gpt4 book ai didi

perl - 子程序条目中 UNKNOWN 的奇怪副本

转载 作者:行者123 更新时间:2023-12-04 09:42:51 25 4
gpt4 key购买 nike

使用 git 时,我在 SVN perl 模块中遇到了一个错误:

Bizarre copy of UNKNOWN in subroutine entry at 
/usr/lib/perl5/vendor_perl/SVN/Base.pm line 80.

而且我不太确定这是 perl 错误还是 subversion 错误。这是相关部分:
# insert the accessor
if (m/(.*)_get$/) {
my $member = $1;
*{"${caller}::$1"} = sub {
&{"SVN::_${pkg}::${prefix}${member}_". # <<<< line 80
(@_ > 1 ? 'set' : 'get')} (@_)
}
}

( full source)

什么是“奇异副本”?又是谁的错?

编辑:软件版本
  • 颠覆 1.6.15-1
  • perl 5.14.0-1


  • 解决方案:当您使用不兼容的标志进行编译时会发生这种情况:

    https://groups.google.com/d/msg/subversion_users/EOru50ml6sk/5xrbu3luPk4J

    最佳答案

    该 perldoc 为您提供了简短的答案,但简短的 STFW session 会产生更多细节。这基本上是 Perl 中堆栈崩溃的证据。

    简单的例子:

    #!/usr/bin/perl
    my @A = 1..5;
    sub blowUp {
    undef @A;
    my $throwAway = {};
    print for @_; # <== line 6
    }
    blowUp(@A);
    __END__
    bash$ ./blowitup
    Bizarre copy of HASH in print at ./blowitup line 6.

    为了让它更有趣,没有 $throwAway 分配,这是一个不可见的错误(尽管在“使用警告”下它至少仍然会告诉你你正在尝试访问一个未初始化的值)。只是当您进行新任务时,您才会看到奇怪的行为。

    由于@_ 本质上是词法范围的子例程,并且参数是通过引用传递的,所以这个小子例程基本上通过取消定义@_ 指向的东西来从自身下面拉出地毯(如果你改变你会得到相同的行为分配给 undef,fwiw)。我在 perl5-porters 上发现了许多帖子,这些帖子提到这是由于堆栈上的项目没有被引用计数,因此没有被干净地释放这一事实的产物。

    因此,虽然我没有深入查看您的完整源代码中的所有代码,但我会继续猜测其中的某些内容与 @_ 上传递的某些内容相混淆;然后当@_ 再次被引用时,Perl 会告诉你丹麦有些东西已经烂了。

    直接的问题是脚本/模块中的错误,iow。 Perl 不引用计数这些项目的更深层次的问题也存在,但我怀疑您在短期内修复模块会更好。 :-)

    HTH-
    布赖恩

    关于perl - 子程序条目中 UNKNOWN 的奇怪副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6217317/

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