加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl对象错误:无法通过包找到对象方法

发布时间:2020-12-15 21:16:41 所属栏目:大数据 来源:网络整理
导读:我意识到在以太中有几个这样的问题,但我不能解决我的问题.也许我应该改善我的横向思维. 我有一个我正在测试的模块.这个模块看起来像: package MyModule;use strict;use warnings;... # a bunch of 'use/use lib' etc.sub new { my $class = shift; my ($nam
我意识到在以太中有几个这样的问题,但我不能解决我的问题.也许我应该改善我的横向思维.

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

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: $namen";

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,但随后提出:

无法通过test_MyModule.t第31行的包“MyModule”找到对象方法“init”,< STDIN>第1行.

这种情况现在才发生,我正在尝试使用对象(似乎有些失败).所以我认为我误解了Perl中对象的应用!任何帮助,将不胜感激…

解决方法

我认为你加载的文件不同于你认为加载的文件.
print($INC{"MyModule.pm"},"n");

会告诉你实际加载了哪个文件. (如果模块名称实际上是Foo :: Bar的形式,请使用$INC {“Foo / Bar.pm”}.)确保包的大小写和文件名匹配.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读