在本地安装Moose时出错

时间:2013-08-20 18:03:25

标签: perl moose

我能够在我的本地机器上运行以下代码,我有一个sudo的力量“

#!/usr/bin/env perl

package Cat
{
    use Moose;
    has 'name', is => 'ro', isa => 'Str';

}

my $test_obj = Cat->new(name => "kitty");

print $test_obj->name()."\n";

结果:

$perl Cat.pl
kitty

但是当我在其他没有sudo的机器上运行完全相同的代码时, 我收到以下错误:

syntax error at Cat.pl line 5, near "{
    "
Execution of Cat.pl aborted due to compilation errors.

为什么会这样?

我在我的三台机器上使用cpanm安装了模块,一台使用sudo,两台没有sudo(我在本地安装了它们)。 perl的版本是:

machine 1(worked, has sudo) : (v5.14.2) built for cygwin-thread-multi-64int
machine 2(did not work, no sudo previlage) : perl, v5.10.1 (*) built for x86_64-linux-thread-multi
machine 3(did not work, no sudo previlage) : v5.10.0 built for x86_64-linux-thread-multi

所以它似乎与共享库或其他东西有关,但我无法弄清楚为什么它不适用于这两台机器。这是一个已知的问题吗?

1 个答案:

答案 0 :(得分:7)

您尝试使用的package { ... }语法已添加到perl 5.14.0(2011年5月发布)中。

如果您想在perl 5.12及更早版本上运行,请将代码更改为:

{
    package Cat;
    use Moose;
    has 'name' => (...);
    # etc.
}

my $test_obj = Cat->new(...);
# etc.

package声明不会泄漏到大括号外,因此底部的代码将在包main中运行,而myour变量将会也留在街区内。