2013-08-20 48 views
-1

我能在我的本地機器上運行下面的代碼,我有須藤的力量」錯誤本地

#!/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的Module,其中一臺使用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 

所以看起來它與共享庫或有事做,但我無法弄清楚到底爲什麼它不兩臺機器上運行。這是一個已知的問題?

回答

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聲明不會泄漏的括號外面,所以在底部的代碼將運行包mainmyour變量也將保留在塊內。

+4

或'{package Cat; ...},因爲底部的代碼不應該是程序包的一部分。 – cjm