Ouch! You're right. My apologies for the confusion. The examples should be this:

    use 5.01000;
    { package a; use Moose::Role; sub result { 'a' } }                          
                                                    
    { package b; use Moose::Role; }
    { package c; use Moose::Role; with qw(a b); sub result { 'c' } }
    { package d; use Moose::Role; with qw(c); }
    {
        package Consumer; use Moose;
        with 'd';
    }
    say Consumer->new->result;

Versus:

    use 5.01000;
    { package a; use Moose::Role; with qw(b c); sub result { 'a' } }
    { package b; use Moose::Role; }
    { package c; use Moose::Role; sub result { 'c' } }
    { package d; use Moose::Role; with qw(a); }                                 
                                                    
    {
        package Consumer; use Moose;
        with 'd';
    }
    say Consumer->new->result;

Only the order of role consumption is changed, but the behavior is now 
different.

Cheers,
Ovid
--
Twitter - http://twitter.com/OvidPerl/
Buy my book - http://bit.ly/beginning_perl
Buy my other book - http://www.oreilly.com/catalog/perlhks/
Live and work overseas - http://www.overseas-exile.com/


>________________________________
> From: Jesse Luehrs <d...@tozt.net>
>To: Ovid <curtis_ovid_...@yahoo.com> 
>Cc: Karen Etheridge <p...@froods.org>; "moose@perl.org" <moose@perl.org> 
>Sent: Thursday, 28 March 2013, 17:11
>Subject: Re: Announcement: Moose 2.0800 is released!
> 
>On Thu, Mar 28, 2013 at 08:59:51AM -0700, Ovid wrote:
>> So the following code will print 'c' (previously it was a fatal error
>> requiring the dev to state exactly what they intended):
>> 
>>     use 5.01000;
>>     { package a; use Moose::Role; sub result { 'a' } }
>>     { package b; use Moose::Role; }
>>     { package c; use Moose::Role; with qw(a b); sub result { 'c' } }
>>     { package d; use Moose::Role; with qw(c); }
>>     {
>>         package Consumer; use Moose;
>>         with 'd';
>>     }
>>     say Consumer->new->result;
>> 
>> And this will print 'a', even though the class is consuming what
>> appears to be the same role:
>> 
>>     use 5.01000;
>>     { package a; use Moose::Role; sub result { 'a' } }
>>     { package b; use Moose::Role; }
>>     { package c; use Moose::Role; with qw(a b); sub result { 'c' } }
>>     { package d; use Moose::Role; with qw(c); }
>>     {
>>         package Consumer; use Moose;
>>         with 'd';
>>     }
>>     say Consumer->new->result;
>> 
>> Note that in the above examples, I have changed nothing but the order
>> in which the roles are consumed, but my behavior has changed.
>
>I can't tell what point you're trying to make here, because these two
>code samples are identical.
>
>-doy
>
>
>

Reply via email to