Re: Roles "consumption" and constant pragma

[email protected] (Jesse Luehrs)
Newsgroups perl.moose
Message-ID <[email protected]>
On Fri, Jul 08, 2011 at 04:50:39PM -0300, Marcos Barbeitos wrote:
> Howdy,
> 
> New to Moose, ran into something curious. Somewhere in the application I
> got:
> 
> 
> package Constants;
> 
> use constant TRUE => 1;
> use constant FALSE => 0;
> 
> 
> I know, I've read several postings of people grumbling that 1 in Perl means
> true and 0 means false and to just get over it.  However, somewhere else I
> got:
> 
> 
> package Roles::Tuple;
> 
> use Moose::Role;
> use Constants;
> use Check;
> 
> 
> and:
> 
> 
> package Roles::Schema;
> 
> use Moose::Role;
> use Constants
> use Check;
> 
> 
> and then I have:
> 
> 
> package Tuple;
> 
> use Moose;
> with 'Roles::Tuple', 'Roles::Schema';
> 
> 
> If I try 'use Tuple'  I get:
> 
> 'Due to method name conflicts in roles 'Roles::Schema' and 'Roles::Tuple',
> the methods 'FALSE' and 'TRUE' must be implemented or excluded by 'Tuple''
> 
> Both 'Constants' and 'Check', which are used by 'Roles::Schema' and
> 'Roles::Tuple' also export several other variables and subroutines, but I
> only run into problems with the constants TRUE and FALSE.
> 
> Any help will be greatly appreciated.  Cheers!

I think this is actually a bug in our method detection heuristics - perl
optimized constants to not be "real" subroutines, and so they don't
track information about their definition in the same way other
subroutines do. I'll see if I can come up with a fix. In the meantime,
you can work around this issue by adding "__PACKAGE__->can('TRUE');
__PACKAGE__->can('FALSE')" to Constants.pm - this should prevent them
from being "actual" constants, and so Moose should be able to deal with
them properly.

-doy
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.