【问题标题】:Error from installing Moose locally本地安装 Moose 出错
【发布时间】:2013-08-20 18:03:24
【问题描述】:

我能够在我拥有 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

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

【问题讨论】:

    标签: perl moose


    【解决方案1】:

    您尝试使用的 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 变量也将保留在块内。

    【讨论】:

    • { package Cat; ... },因为底部的代码不应该是包的一部分。
    猜你喜欢
    • 2013-02-03
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-30
    相关资源
    最近更新 更多