perlmoosemoops

Use MooseX meta attributes with Moops


Is it possible to use MooseX meta attributes with Moops?

Consider this Moose sample code:

use v5.14;
use strict;
use warnings;

package TraitTest;
use Moose;
with 'MooseX::Getopt';
has opt1 => (
    traits => ['Getopt'],
    is => 'ro',
    isa => 'Bool',
    cmd_aliases => ['o']
);
1;
package main;
print TraitTest->new_with_options()->opt1 ? "yes\n" : "no\n";

I tried to transform this to Moops like so:

use v5.14;
use strict;
use warnings;

use Moops;
class TraitTest
with MooseX::Getopt
{

  has opt1 => (
#    metaclass => 'Getopt', # also not working
    traits => ['Getopt'],
    is => 'ro',
    isa => 'Bool',
    cmd_aliases => ['o']
  );
}
print TraitTest->new_with_options()->opt1 ? "yes\n" : "no\n";

Solution

  • Moops classes are backed by Moo, not Moose by default. Thus MooseX extensions will not usually work.

    However, it's possible to use Moose instead of Moo:

    class TraitTest with MooseX::Getopt using Moose {
        ...
    }