我意识到在以太中有几个这样的问题,但我不能解决我的问题.也许我应该改善我的横向思维.
我有一个我正在测试的模块.这个模块看起来像:
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,但随后提出:
无法通过test_MyModule.t第31行的包“MyModule”找到对象方法“init”,< STDIN>第1行.
这种情况现在才发生,我正在尝试使用对象(似乎有些失败).所以我认为我误解了Perl中对象的应用!任何帮助,将不胜感激…
解决方法
我认为你加载的文件不同于你认为加载的文件.
print($INC{"MyModule.pm"},"\n");
会告诉你实际加载了哪个文件. (如果模块名称实际上是Foo :: Bar的形式,请使用$INC {“Foo / Bar.pm”}.)确保包的大小写和文件名匹配.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。