【问题标题】:"Odd number of hash elements" when declaring MooseX::ClassAttribute声明 MooseX::ClassAttribute 时出现“奇数个哈希元素”
【发布时间】:2014-11-07 22:32:24
【问题描述】:

在 OSX 'Mavericks' 上,这个:

package FOO;    
use Moose;
use MooseX::ClassAttribute;
class_has 'BAR' => ( is => 'rw' );

... 根据 'perl -c' 检查干净:

FOO.pm 语法正常

...但是如果我只使用 'perl FOO.pm' 运行它会出现此错误:

/System/Library/Perl/Extras/5.16/MooseX/ClassAttribute.pm 第 37 行的哈希分配中的元素数为奇数。 在 /Library/Perl/5.16/darwin-thread-multi-2level/Moose/Meta/Attribute.pm 第 71 行使用“严格引用”时,不能使用字符串(“文件”)作为 HASH 引用。

我已经尽我所能弄清楚这里发生了什么,但我很难过。还有什么我必须先“使用”或声明的吗? (这是我能想到的最小的测试用例,但是每当我在模块中使用 class_has() 时都会发生错误。)

【问题讨论】:

  • 我还没有真正对 Moose 做过任何工作,但是你想将你的 perl 模块包含在一个程序中并运行它吗?我认为您不应该使用perl FOO.pm,而是应该使用perl some_program.pl,其中包含use FOO.pm
  • 尝试在命令行运行moose-outdated。您可能有一个过时且不兼容的模块。
  • 我已经测试了您的 SSCCE,它工作正常;完全符合预期。我认为@cjm 是在正确的轨道上;您的工具链中的某些内容已过时、损坏或未完全安装。
  • @cjm,你是对的。我不得不重新安装大约六个 MooseX 模块,然后它运行顺利。现在,如果只有实际的应用程序可以,但那是另一回事了 :)
  • @amp108:请您写一个解决方案并接受它。谢谢。

标签: perl moose class-attribute


【解决方案1】:

当您从使用 Moose 的模块中收到奇怪的错误时,首先要做的是在命令行中运行 moose-outdated 脚本。您可能有一个过时的 MooseX 模块,与安装的 Moose 版本不兼容。

您应该在每次升级 Moose 时运行 moose-outdated,但这很容易忘记,尤其是在升级 Moose 时,因为它是您正在安装的其他模块的依赖项之一。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多