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

前端之家收集整理的这篇文章主要介绍了Perl对象错误:无法通过包找到对象方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我意识到在以太中有几个这样的问题,但我不能解决我的问题.也许我应该改善我的横向思维.

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

  1. package MyModule;
  2. use strict;
  3. use warnings;
  4.  
  5. ... # a bunch of 'use/use lib' etc.
  6.  
  7. sub new {
  8. my $class = shift;
  9. my ($name,$options) = @_;
  10.  
  11. my $self = {
  12. _name => $name,_features => $options,_ids => undef,_groups => undef,_status => undef,};
  13. bless $self,$class;
  14. return $self;
  15. }
  16.  
  17. sub init {
  18. my ($self) = @_;
  19. my ($ids,$groups,$status) = ...; # these are from a working module
  20. $self->{_ids} = $ids;
  21. $self->{_groups} = $groups;
  22. $self->{_status} = $status;
  23. return $self;
  24. }

这是我的测试文件

  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use MyModule;
  5. use Test::More tests => 1;
  6. use Data::Dumper;
  7.  
  8. print "Name: ";
  9. my $name;
  10. chomp($name = <STDIN>);
  11. print "chosen name: $name\n";
  12.  
  13. my %options = (
  14. option1 => 'blah blah blah',option2 => 'blu blu blu',);
  15.  
  16. my $name_object = MyModule->new($name,\%options);
  17. print Dumper($name_object);
  18. isa_ok($name_object,'MyModule');
  19.  
  20. $name_object->init;
  21. print Dumper($name_object);

现在它适用于isa_ok,但随后提出:

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

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

解决方法

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

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

猜你在找的Perl相关文章