Perl 对象错误 : Can't locate object method via package

标签 perl oop object

我意识到以太坊中有几个这样的问题,但我无法解决我的问题。也许我应该提高我的横向思维。

我有一个正在测试的模块。这个模块看起来像:

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 的大小写和文件名匹配。

关于Perl 对象错误 : Can't locate object method via package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15689661/

相关文章:

为 IN 子句传递 DBI-> 执行值时出现 perl 错误

oop - Liskov 替换原则是否适用于从抽象类继承的子类型?

c# - 将 C# 对象保存到文件

javascript - 使用相同的键将值存储在 javascript 对象中

perl - "use warnings;"和 "use warnings ' all';"之间有区别吗?

javascript - 如何使用 cgi.pm 获得正确的 html header ?

arrays - 可以在不先声明变量的情况下进行引用吗?

oop - 你什么时候停止封装?

oop - 依赖倒置原理及组成

javascript - React - 如何循环和更新对象模型中的值?