“不能使用字符串(”Catalyst :: Authentication :: Store:“...)作为HASH引用,而”严格引用“

时间:2014-01-24 17:18:13

标签: perl perl-module catalyst

我从这个链接设置了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引用,而”strict refs“在使用时accessor Catalyst :: Authentication :: Store :: DBIx :: Class :: User :: _ user(在/root/perl5/lib/perl5/Catalyst/Authentication/Store/DBIx/Class/User.pm第12行定义)第5行。“

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

2 个答案:

答案 0 :(得分: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"不允许这样做。

答案 1 :(得分:0)

我发现了概率,这是数据库中的错误配置(在UserAction表中我有错误的字段名称(“actio_id”=>“action_id”))。所以现在每个人都可以:p