首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >随机看到“在解析方法时发现的Stub”??“重载”在包"XXX“中

随机看到“在解析方法时发现的Stub”??“重载”在包"XXX“中
EN

Stack Overflow用户
提问于 2017-06-23 11:38:29
回答 1查看 113关注 0票数 1

在过去的几个星期里,我们已经重新部署了服务器,并且随机地(但经常)得到以下错误。

dbix版本现在是0.082820,以前是0.08250,没有发生此错误。

“在解析方法时发现的”??“/home/perlbrew/.perlbrew/libs/perl-5.16.3@latest-20160209/lib/perl5/DBIx/Class/Row.pm第1250行”软件包"XXX“中的”重载“。

XXX包

可能有关联

代码语言:javascript
复制
use Class::Trait qw( TPrintable  );

sub inflate_result {
    my $self = shift;
    my $ret = $self->next::method(@_);
    my $typeCd = $ret->typeCd;
    given ($typeCd) {
        when( $specialTypeCd ) {
            $self->ensure_class_loaded( $specialSubClass );
            bless ($ret, $specialSubClass);
        }
        default {
            bless ($ret, $self);
        }
    }
    return $ret;
}

引入XXX包的代码有一个助手方法,用于:

代码语言:javascript
复制
my $theY = $c->model('DB::Y')->find( $yID,
    {
        prefetch => [ { 'xxxs' => 'typecd' } , 'zid' ]
    });

return $theY;

关于问题所在的思考;如何使提交错误报告一致。

我们已经知道了SQLA_ISVALUE_IGNORE_AUTOGENERATED_STRINGIFICATION=1的Abstract.pm中潜在的解决方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-06 19:33:42

一个选择保持匿名的人建议的修正(这对我们perl 5.16.3来说是不够的)

最后,我们切换到perl 5.26,问题就解决了。(我们被告知“你不太可能: 5.18大修了很多过载的内部设备。”)

代码语言:javascript
复制
diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm
index 264b0b1..b4d8fb4 100644
--- a/lib/SQL/Abstract.pm
+++ b/lib/SQL/Abstract.pm
@@ -104,7 +104,11 @@ sub is_plain_value ($) {
         # "%s"> and the source of overload::mycan())
         #
         # either has stringification which DBI SHOULD prefer out of the box
-        grep { *{ (qq[${_}::(""]) }{CODE} } @{ $_[2] = mro::get_linear_isa( $_[1] ) }
+        grep {
+          *{ (qq[${_}::()]) }{CODE}
+            and
+          *{ (qq[${_}::(""]) }{CODE}
+        } @{ $_[2] = mro::get_linear_isa( $_[1] ) }
           or
         # has nummification or boolification, AND fallback is *not* disabled
         (

让你放心:下面是实际发生的事情:

代码语言:javascript
复制
perl -e '

    use warnings;
    use strict;

    require Scalar::Util;

    {
      package Some::Overload;
      use overload
        q{""}       => "named_stringifier",
        fallback => 1,
      ;

      sub named_stringifier { $_[0] . "" }
    }

    {
      package Some::Subclass;
      use base "Some::Overload";
    }


    my $thing = bless {}, "Some::Subclass"; 


    {
      no strict "refs";
      grep { *{ (qq[${_}::(""]) }{CODE} } qw( Some::Subclass Some::Overload );
    }


    for (1, 2) {


      # simulates runtime require of some *UNRELATED* class
      eval sprintf <<EOS, $_;
      {
        package Some::UnrelatedThing%s;
        use overload
          q{""} => sub { \$_[0] . "" },
          fallback => 1,
        ;
      }
EOS

      my $some_object = bless {}, "Some::Subclass";
    }

    warn "got here, all is well\n";
    exit 0;
'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44720560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档