develooper Front page | perl.moose | Postings from July 2011

Re: Roles "consumption" and constant pragma

Thread Previous
From:
Jesse Luehrs
Date:
July 8, 2011 13:02
Subject:
Re: Roles "consumption" and constant pragma
Message ID:
20110708200208.GS26428@tozt.net
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

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About