0

我正进入(状态:

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

我不知道为什么,有什么想法吗?

用户.pm

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

测试.pl

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

2 回答 2

3

Perl 中的对象构造不是这样工作的。构造函数必须显式返回一个已使用bless函数对对象进行的引用;事实上,在 Perl 中,这是定义构造函数的,因为 " new" 只是子例程的另一个名称,并且与 C++ 不同,调用命名函数new不会强制 Perl 创建对象。在这个特定的例子中,new只是返回 的返回值print,这可能只是一些真实的值,并且试图test在这个值上调用方法失败,因为它没有被祝福到任何类中。

于 2012-06-21T18:56:51.850 回答
3

我建议您使用语法$users = Users->new()而不是new Users. 你忘了祝福方法里面的价值观new。请perlootut在 perldoc 下阅读。

用户.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();
于 2012-06-21T18:59:50.630 回答