2012-06-21 174 views
0

我越來越:創建類對象

Can't call method "test" without a package or object reference at 4.pl line 6. 

而且我不知道爲什麼,任何想法?

Users.pm

package Users; 
sub new{ 
    print "Created\n"; 
} 
sub test{ 
    print "a"; 
} 
1; 

Test.pl

BEGIN { 
    push @INC,"/home/baddc0re/Desktop/perl_test/"; 
} 
use Users; 
$user = new Users(); 
$user->test(); 

回答

3

我建議你使用語法$users = Users->new()而不是new Usersnew方法中您忘記了bless值。請在perldoc下閱讀perlootut

Users.pm

package Users; 

sub new { 
    my $class = shift; 

    my $self = {}; 
    bless $self, $class; 
    return $self; 
} 

sub test { 
    print "a"; 
} 

1; 

主要

use strict; 
use Users; 

my $users = Users->new(); 
print $users->test(); 
3

在Perl對象的構造不工作的方式。構造函數必須顯式地返回已經作爲對象的引用,the bless function;事實上,在Perl中,這是定義構造函數的原因,因爲「new」只是子例程的另一個名稱,與C++不同,調用名爲new的函數不會強制Perl創建對象。在這個特定的例子中,new剛剛返回了print的返回值,這大概只是一些真實值,並且試圖對此值調用test方法失敗,因爲它沒有被祝福到任何類中。

+0

很好的解釋 – badc0re