这个面向对象程序的错误是什么?

时间:2013-10-01 04:30:42

标签: perl oop

我正在学习perl,当我尝试面向对象时,我遇到了错误, 这是代码,Test.pm

 #!/usr/bin/perl 

package Test;

sub new
{
    my $class = shift;
    my $self = {
        _firstName => shift,
        _lastName  => shift,
        _ssn       => shift,
    };
    # Print all the values just for clarification.
    print "First Name is $self->{_firstName}\n";
    print "Last Name is $self->{_lastName}\n";
    print "SSN is $self->{_ssn}\n";
    bless $self, $class;
    return $self;
}

sub setFirstName {
    my ( $self, $firstName ) = @_;
    $self->{_firstName} = $firstName if defined($firstName);
    return $self->{_firstName};
}

sub getFirstName {
    my( $self ) = @_;
    return $self->{_firstName};
}
1;

和test.pl

#!/usr/bin/perl
use Test;
$object = Test::new( "Mohammad", "Saleem", 23234345); # Get first name which is set using constructor.
$firstName = $object->getFirstName();

print "Before Setting First Name is : $firstName\n";

# Now Set first name using helper function.
$object->setFirstName( "Mohd." );

# Now get first name set by helper function.
$firstName = $object->getFirstName();
print "Before Setting First Name is : $firstName\n";

当我尝试跑步时,它会显示出这样的错误,

Can't locate object method "new" via package "Test" at test.pl line 2.

这个面向对象程序的错误是什么?

3 个答案:

答案 0 :(得分:7)

Test是作为perl标准发行版的一部分的模块的名称。您的use Test正在加载而不是您的测试;为您的模块选择另一个名称。

答案 1 :(得分:4)

您的问题是您在默认包含的目录中的某个其他位置已经有一个名为Test.pm的模块。

尝试运行perl:

perl -I./ test.pl

这会将目录./(即当前目录)添加到@INC的开头(这是一个包含从中加载模块的目录列表的特殊变量)。

答案 2 :(得分:3)

Test是一个预先存在的Perl模块,它位于当前目录中@INC之前的Test.pm中。 (您正在加载错误的Test.pm。)

将模块重命名为MyTest或类似名称。