加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 子例程条目中UNKNOWN的奇怪副本

发布时间:2020-12-15 21:54:40 所属栏目:大数据 来源:网络整理
导读:我在使用git时遇到了SVN perl模块中的错误: Bizarre copy of UNKNOWN in subroutine entry at /usr/lib/perl5/vendor_perl/SVN/Base.pm line 80. 我不太确定这是一个perl bug还是一个颠覆bug.这是相关部分: # insert the accessorif (m/(.*)_get$/) { my $
我在使用git时遇到了SVN perl模块中的错误:
Bizarre copy of UNKNOWN in subroutine entry at 
/usr/lib/perl5/vendor_perl/SVN/Base.pm line 80.

我不太确定这是一个perl bug还是一个颠覆bug.这是相关部分:

# 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会话会产生更多细节.这基本上是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赋值,这是一个看不见的错误(虽然在’使用警告’下它至少仍会告诉你,你正试图访问未初始化的值).只是当你做一个新的任务,你看到了奇怪的行为.

因为@_本质上是词法范围的子程序,并且参数是通过引用传递的,所以这个小子程序基本上通过取消@_指向的东西从其自身中拉出来(如果你改变你会得到相同的行为)未成年人的任务,fwiw).我在perl5-porters上发现了一些帖子,这些帖子提到这是一个事实,即堆栈中的项目不是引用计数,因此没有干净地释放.

因此,虽然我没有深入查看完整源代码中的所有代码,但我会继续猜测那里的某些东西搞乱了@_传递的东西;然后当再次引用@_时,Perl告诉你丹麦有些东西烂了.

当前的问题是脚本/模块中的一个错误,哇. Perl没有引用计算这些项目的更深层次的问题也存在,但我怀疑你在短期内修复模块会有更好的运气.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读