On 06/14/2010 11:27 AM, Jesse Luehrs wrote:
> On Mon, Jun 14, 2010 at 11:20:15AM +0200, Emmanuel Quevillon wrote:
>> Hi Moose people,
>>
>> I must confess I'm not really ease with Moose behavior, but I get a
>> strange error from it when I start my perl script.
>>
>> Here it is :
>>
>> Couldn't load class (BiblioList::Abstract) because: Couldn't load
>> class (BiblioList::Root) because: BiblioList::Root already has a
>> metaclass, but it does not inherit Moose::Meta::Class
>> (Class::MOP::Class=HASH(0x2e79840)). at
>> /usr/local/lib/perl/5.10.1/Moose.pm line 166
>
> You should include the code that's causing this error; it's not really
> possible to figure out what's wrong just from the message. Some
> possibilities include a circular dependency between use/extends/etc
> statements, or some part of the code accessing the BiblioList::Root
> class before it actually gets loaded.
>
> -doy
Hi Jesse,
Ok, here is the hierarchy:
==> in script update_publications.pl :
use BiblioList::Abstract::Updater;
...
==> Pkg BiblioList::Abstract::Updater :
use BiblioList::Abstract::Processor;
use BiblioList::Abstract::Comparator;
...
==> Pkg BiblioList::Abstract::Processor :
...
extends 'BiblioList::Abstract';
...
==> Pkg BiblioList::Abstract :
package BiblioList::Abstract;
use Moose;
extends 'BiblioList::Root';
no Moose;
1;
==> Pkg BiblioList::Root :
package BiblioList::Root;
use strict;
use warnings;
use BiblioList::Config;
use BiblioList::Exception;
use BiblioList::Exception::System;
use BiblioList::Exception::FileNotFound;
use BiblioList::Exception::DBerror;
use BiblioList::Exception::ParseError;
use BiblioList::Exception::BadParameter;
use Moose;
has '_verbose' => (
is => 'rw',
isa => 'Bool',
default => 0,
);
has '_debug' => (
is => 'rw',
isa => 'Bool',
default => 0,
);
has 'config' => (
is => 'rw',
isa => 'BiblioList::Config',
predicate => 'has_config',
default => sub { BiblioList::Config->new();},
);
no Moose;
...
1;
By the way, all my modules BiblioList::* have a called to
extends 'BiblioList::Root';
This is the way all these package are called successively :
And here is the bottom trace thrown :
....
Moose::extends('BiblioList::Abstract') called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 7
require BiblioList/Abstract/Processor.pm called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Updater.pm
line 3
BiblioList::Abstract::Updater::BEGIN() called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract.pm
line 0
eval {...} called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract.pm
line 0
require BiblioList/Abstract/Updater.pm called at
update_publications.pl line 9
main::BEGIN() called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract.pm
line 0
eval {...} called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract.pm
line 0
Compilation failed in require at
/usr/local/lib/perl/5.10.1/Class/MOP.pm line 114.
at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 120
Class::MOP::__ANON__('Couldn\'t load class
(BiblioList::Root) because: BiblioList::...') called at
/usr/share/perl5/Try/Tiny.pm line 98
Try::Tiny::try('CODE(0x1555e00)',
'Try::Tiny::Catch=REF(0x1de9978)') called at
/usr/local/lib/perl/5.10.1/Class/MOP.pm line 125
Class::MOP::load_first_existing_class('BiblioList::Abstract') called
at /usr/local/lib/perl/5.10.1/Class/MOP.pm line 137
Class::MOP::load_class('BiblioList::Abstract', undef) called
at /usr/local/lib/perl/5.10.1/Moose/Meta/Class.pm line 288
Moose::Meta::Class::superclasses(undef,
'BiblioList::Abstract') called at
/usr/local/lib/perl/5.10.1/Moose.pm line 53
Moose::extends('Moose::Meta::Class=HASH(0x1cf2150)',
'BiblioList::Abstract') called at
/usr/local/lib/perl/5.10.1/Moose/Exporter.pm line 293
Moose::extends('BiblioList::Abstract') called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 7
require BiblioList/Abstract/Processor.pm called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Updater.pm
line 3
BiblioList::Abstract::Updater::BEGIN() called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 0
eval {...} called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 0
require BiblioList/Abstract/Updater.pm called at
update_publications.pl line 9
main::BEGIN() called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 0
eval {...} called at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Processor.pm
line 0
Compilation failed in require at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Updater.pm
line 3.
BEGIN failed--compilation aborted at
/home/tuco/src/perl/projects/Catalyst/BiblioList/legiobiblio/lib/BiblioList/Abstract/Updater.pm
line 3.
Compilation failed in require at update_publications.pl line 9.
BEGIN failed--compilation aborted at update_publications.pl line 9.
t...@gin script$
But as you mentioned is it surely a circular dependency that causes
the problem.
Thanks anyway
--
-------------------------
Emmanuel Quevillon
Biological Software and Databases Group
Institut Pasteur
+33 1 44 38 95 98
tuco at_ pasteur dot fr
-------------------------