【问题标题】:"Can't use string ("Catalyst::Authentication::Store:"...) as a HASH ref while "strict refs"“不能使用字符串 ("Catalyst::Authentication::Store:"...) 作为 HASH ref 而“strict refs”
【发布时间】:2014-01-24 17:18:12
【问题描述】:

我通过这个链接设置了 Catalyst::Plugin::Authorization::Abilities 模块:

[http://search.cpan.org/dist/Catalyst-Plugin-Authorization-Abilities/lib/Catalyst/Plugin/Authorization/Abilities.pm][1]

Bur 调用该函数时:

$c->assert_user_ability('show_home_action');

我收到这条消息很可能:

在 OpConsole::Controller::Root->index 中捕获异常“不能使用字符串 (“Catalyst::Authentication::Store:”...) 作为 HASH ref 而“strict refs”在访问器中使用Catalyst::Authentication::Store::DBIx::Class::User::_user(定义在 /root/perl5/lib/perl5/Catalyst/Authentication/Store/DBIx/Class/User.pm 第 12 行)第 5 行。 "

我检查了几次我的配置,在我看来一切正常。但问题是什么:/

【问题讨论】:

  • 所以您是说您已将整个sub delete : Local {...sub display_user : Local {... 函数复制到一个空白的perl 脚本中并出现此错误?也许您可以发布一些代码,以便更容易看到问题......

标签: perl perl-module catalyst


【解决方案1】:

通常,此错误消息表示您使用了本应作为对象方法的东西,就好像它是类方法一样。

use v5.14;

package Foo {
   use Moose;
   has foo => (is => 'ro', default => 42);
}

my $class  = 'Foo';
my $object = $class->new;

say $object->foo;  # 42
say $class->foo;   # Can't use string ("Foo") as a HASH ref...

这是因为foo 方法(在上例中由 Moose 生成)是这样实现的:

sub foo {
   my $self = shift;
   return $self->{foo};
}

因此它将第一个参数 ($self) 视为哈希引用。如果该方法被称为$class->foo,那么$class 是一个字符串,将被视为一个哈希引用,这是strict "refs" 不允许的。

【讨论】:

    【解决方案2】:

    我找到了问题,这是数据库中的错误配置(在 UserAction 表中,我的字段名称错误(“actio_id”=>“action_id”))。所以现在每个 thx 都可以了:p

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-08
      • 2011-12-19
      • 1970-01-01
      • 2014-01-18
      • 2017-08-20
      • 2016-01-11
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多