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 formeFoo::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?
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes en train de charger un fichier différent de celui que vous pensez que vous êtes le chargement.
vous dira quel fichier que vous avez chargé. (Si le nom du module est vraiment de la forme
Foo::Bar
, utilisez$INC{"Foo/Bar.pm"}
.) Assurez-vous que la capitalisation de lapackage
et le nom de fichier de match.