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