There's MooseX::MultiInitArg for dealing with the constructor, and
aliasing an accessor would be a fairly simple meta thing via ...
what, alias_method or somesuch?  You could do it one better and make
a MooseX::AttributeAlias or something.

On Wed, Nov 26, 2008 at 03:07:26PM +0000, Ian Sillitoe wrote:
> > Any clever idea how I can make an alias attribute?
> 
> 
> Hmmm... there may be a simple way of doing it but I can't see anything
> obvious on the docs - here's a workaround hack:
> 
> 
>   package My::App;
> 
>   use Moose;
> 
>   has 'colour' => (
>       is      => 'rw',
>       isa     => 'Str',
>   );
> 
>   sub BUILDARGS {
>       my $class = shift;
>       my $args  = @_ == 1 ? $_[0] : { @_ };
> 
>       # deal with 'color' in constructor
>       if ( exists( $args->{color} ) ) {
>           $args->{ colour } = $args->{color};
>           delete $args->{ color };
>       }
> 
>       return $args;
>   }
> 
>   # manually setup accessor for color (redirect to colour)
>   sub color {
>       my $self = shift;
>       my $colour = shift;
>       $self->colour( $colour ) if @_ > 1;
>       return $self->colour;
>   }
> 
> 
> I'm guessing here - but if something like this hasn't already been written
> then I guess you should be able to register your own attribute trait (e.g.
> called 'alias') and deal with it in the BUILD method of the trait role, e.g.
> 
> 
> http://search.cpan.org/~drolsky/Moose-0.61/lib/Moose/Cookbook/Meta/Recipe3.pod
> 
> 
> Cheers,
> 
> Ian

Reply via email to