Des objets Perl erreur: ne Peut pas localiser méthode de l'objet via le package

Je me rends compte il y a plusieurs questions de ce genre dans l'éther, mais je ne peux pas une solution pour mon problème. Peut-être que je dois améliorer ma pensée latérale.

J'ai un module qui je suis en train de tester. Ce module ressemble à quelque chose comme:

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;
}

C'est mon fichier de test:

#!/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);

Maintenant, il fonctionne jusqu'à la isa_ok, mais vient ensuite avec:

Can't locate object method "init" via package "MyModule" at test_MyModule.t line 31, <STDIN> line 1.

Ce seulement maintenant que je suis en train d'essayer (et quelque peu défaut il me semble) pour utiliser les objets. Donc je pense que je suis mal à comprendre les applications des objets en Perl! Toute aide serait appréciée...

  • la ligne 31 est le init ligne pour être clair
  • Le problème est qu'avec la partie de code que vous n'êtes pas à nous montrer.
  • Je n'avais pas de problèmes de fonctionnement de votre code (à l'exception d'un manque d'1; à la fin du module). Êtes-vous sûr il n'y a pas d'autres modules de nom MyModule dans votre @INC chemin? Vérifiez %INC assurez-vous que vous avez chargé le bon module.
  • print($INC{"MyModule.pm"}, "\n"); pourrait aider. Et assurez-vous que la capitalisation est correct. (Si le nom du module est vraiment de la forme Foo::Bar, utilisez $INC{"Foo/Bar.pm"}.)
  • à l'aide de qui les aident énormément! j'ai découvert que j'était à l'aide de la 'MyModule" que j'avais téléchargé dans la bibliothèque plutôt que j'ai l'édition... quelle erreur! Comment puis-je fermer une question ouverte?
InformationsquelleAutor dgBP | 2013-03-28