Perl对象错误:无法通过程序包找到对象的方法
问题描述:
我知道在以太网中有这样的几个问题,但我无法解决我的问题。也许我应该改善我的横向思维。Perl对象错误:无法通过程序包找到对象的方法
我有一个模块,我正在测试。这个模块看起来类似:
package MyModule;
use strict;
use warnings;
... # a bunch of 'use/use lib' etc.
sub new {
my $class = shift;
my ($name,$options) = @_;
my $self = {
_name => $name,
_features => $options,
_ids => undef,
_groups => undef,
_status => undef,
};
bless $self,$class;
return $self;
}
sub init {
my ($self) = @_;
my ($ids,$groups,$status) = ...; # these are from a working module
$self->{_ids} = $ids;
$self->{_groups} = $groups;
$self->{_status} = $status;
return $self;
}
这是我的测试文件:
#!/usr/bin/perl -w
use strict;
use MyModule;
use Test::More tests => 1;
use Data::Dumper;
print "Name: ";
my $name;
chomp($name = <STDIN>);
print "chosen name: $name\n";
my %options = (
option1 => 'blah blah blah',
option2 => 'blu blu blu',
);
my $name_object = MyModule->new($name,\%options);
print Dumper($name_object);
isa_ok($name_object,'MyModule');
$name_object->init;
print Dumper($name_object);
现在,它的工作原理下到isa_ok
,但随后出现:
Can't locate object method "init" via package "MyModule" at test_MyModule.t line 31, <STDIN> line 1.
这只是现在我正在尝试使用对象(并且看起来有些失败)。所以我认为我误解了Perl中的对象的应用程序!任何帮助,将不胜感激...
答
我想你正在加载一个不同的文件,而不是你认为你正在加载的文件。
print($INC{"MyModule.pm"}, "\n");
会告诉你你实际加载了哪个文件。 (如果模块名称的格式为Foo::Bar
,请使用$INC{"Foo/Bar.pm"}
。)确保package
的大小写与文件名匹配。
线31了'init'线清晰 – dgBP
问题是你不向我们展示了部分代码。 –
我没有运行代码的问题(除了在模块末尾缺少1;)。你确定在@INC路径中没有其他模块名称为MyModule吗?检查%INC以确保您加载了正确的模块。 – imran