2013-03-28 51 views
6

我知道在以太網中有這樣的幾個問題,但我無法解決我的問題。也許我應該改善我的橫向思維。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中的對象的應用程序!任何幫助,將不勝感激...

+0

線31了'init'線清晰 – dgBP

+1

問題是你不向我​​們展示了部分代碼。 –

+4

我沒有運行代碼的問題(除了在模塊末尾缺少1;)。你確定在@INC路徑中沒有其他模塊名稱爲MyModule嗎?檢查%INC以確保您加載了正確的模塊。 – imran

回答

6

我想你正在加載一個不同的文件,而不是你認爲你正在加載的文件。

print($INC{"MyModule.pm"}, "\n"); 

會告訴你你實際加載了哪個文件。 (如果模塊名稱的格式爲Foo::Bar,請使用$INC{"Foo/Bar.pm"}。)確保package的大小寫與文件名匹配。

-5

一定有你的類中此行的正確的地方:

use Moose; 
+2

爲什麼這個問題有關?你能解釋一點嗎? – PatomaS

+1

Whiich正確的地方? –

相關問題