G'day Moosers, I'm currently working on some quick lightning talks demonstrating Moose and why it's useful. One of the examples I'm using for roles looks like this:
package SunSmart; use Moose::Role; use Weather::Google; use constant HOT => 28; # Deg C. requires 'go_outside'; requires 'location'; before 'go_outside' => sub { my ($self) = @_; my $weather = Weather::Google->new( $self->location ); if ($weather->current->{temp_c} > HOT) { print "Don't forget your hat!\n"; } } In short, if something has a location, and the ability to go_outside, then we can give it the SunSmart role, and it won't forget its hat if it's too hot. Unfortunately for me, `location` is an attribute on practically all of my classes, and Moose doesn't seem to like having an attribute to satisfy a 'requires': 'SunSmart' requires the method 'location' to be implemented by 'Person::Social'but the method is only an attribute accessor at /usr/lib/perl5/site_perl/5.8/Moose/Meta/Role/Application.pm line 59 This makes me sad, since I really *do* require a location method, but it's absolutely fine if it's an attribute. I know there have been some discussions about this in the past, with the possibility of a 'requires_attr' or similar keyword, although to the best of my knowledge this is not yet implemented. In the meantime, is there any easy[1] way to tell Moose that attributes are just fine to satisify 'requires' dependencies? Many thanks, Paul [1] Since I'm writing short talks for mixed audiences, I can't show anything too scary. Sure, I'm willing to dig around in the guts of all sorts of things, but I'm trying to dispel the myth that as a regular Perl programmer you should have to. -- Paul Fenwick <p...@perltraining.com.au> | http://perltraining.com.au/ Director of Training | Ph: +61 3 9354 6001 Perl Training Australia | Fax: +61 3 9354 2681