创建类对象

时间:2012-06-21 18:50:28

标签: perl

我得到了:

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();

2 个答案:

答案 0 :(得分:3)

Perl中的对象构造不起作用。构造函数必须显式返回已使用the bless function创建的对象的引用;实际上,在Perl中,这是定义构造函数的原因,因为“new”只是子例程的另一个名称,与C ++不同,调用名为new的函数不会强制Perl创建宾语。在此特定示例中,new只返回print的返回值,这可能只是某个真值,并且尝试在此值上调用test方法失败,因为它没有'祝福任何一个班级。

答案 1 :(得分:3)

我建议您使用语法$users = Users->new()而不是new Users。您忘记了new方法中的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();