Hi,
We have a bit of code which has broken between 2.1005 and 2.1804 - it
was originally written somewhere around 0.85 and I don't think has
really changed much since then.
The code involves a trait which consumes another trait, and this seems
to be what's causing the problem. Hopefully some (cut-down) code will
explain this...
package Test::Meta::Role::Trait::CoreObject;
use Moose::Role;
has primaryAttribute => (
is => 'rw',
isa => 'Str');
Moose::Exporter->setup_import_methods(
with_caller => [ 'primaryKey' ],
also => 'Moose::Role',
);
sub primaryKey {
my $meta = shift;
$meta = Moose::Meta::Role->initialize($meta) if !ref($meta);
return $meta->primaryAttribute(@_);
}
no Moose::Role;
package Moose::Meta::Role::Custom::Trait::CoreObject;
sub register_implementation
{'Test::Meta::Role::Trait::CoreObject'};
1;
package Test::Meta::Role::Trait::LDAPObject;
use Moose::Role;
with 'Test::Meta::Role::Trait::CoreObject';
has oid => (
is => 'rw',
isa =>'Str',
);
Moose::Exporter->setup_import_methods(
with_caller => [ 'oid', 'primaryKey' ],
also => 'Moose::Role',
);
sub oid {
my $meta = Moose::Meta::Role->initialize(shift);
$meta->oid(shift);
}
no Moose::Role;
package Moose::Meta::Role::Custom::Trait::LDAPObject;
sub register_implementation
{'Test::Meta::Role::Trait::LDAPObject'};
1;
package Test::TestRole;
use Test::Meta::Role::Trait::LDAPObject;
se Moose::Role -traits => 'LDAPObject';
oid '1.3.6.1.4.1.4247.1.747.99.23';
no Moose::Role;
1;
$ perl -Ilib -MTest::TestRole
String found where operator expected at lib/Test/TestRole.pm line 5, near "oid
'1.3.6.1.4.1.4247.1.747.99.23'"
(Do you need to predeclare oid?)
syntax error at lib/Test/TestRole.pm line 5, near "oid
'1.3.6.1.4.1.4247.1.747.99.23'"
BEGIN not safe after errors--compilation aborted at lib/Test/TestRole.pm line 7.
Compilation failed in require.
BEGIN failed--compilation aborted.
$
The LDAPObject trait works fine when it doesn't consume the CoreObject
trait (and I remove primaryKey from setup_import_methods), so I
suspect we're using Moose::Exporter incorrectly, but I'm not too
familiar with this side of moose meta, in that I don't want to try and
jsut hack my way around it. Any assistance would be greatly
appreciated.
Cheers
Toby Blake
School of Informatics
University of Edinburgh
--
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.