NAME

MooseX::Marlin - 🫎 ❤️ 🐟 inherit from Marlin classes in Moose

SYNOPSIS

use v5.20.0;
no warnings "experimental::signatures";

package Person {
  use Types::Common -lexical, -all;
  use Marlin::Util -lexical, -all;
  use Marlin
    'name'  => { is => ro, isa => Str, required => true },
    'age'   => { is => rw, isa => Int, predicate => true };
}

package Employee {
  use Moose;
  use MooseX::Marlin;
  extends 'Person';
  
  has employee_id => ( is => 'ro', isa => 'Int', required => 1 );
}

WARNING

This appears to work, but it is not thoroughly tested.

DESCRIPTION

Loading this class will do a few things:

  • Ensures you are using at least Moose 2.2004 (released in January 2017).

  • Loop through all Marlin classes and roles which have already been defined (also any foreign classes like Class::Tiny ones which Marlin has learned about by inheritance, etc) and inject metadata about them into Class::MOP, enabling them to be used by Moose.

  • Tells Marlin to keep injecting metadata into Class::MOP for any Marlin classes or roles that are loaded later.

  • Checks that the caller package is a Moose class or Moose role, and complains otherwise. (Make sure to use Moose or use Moose::Role before you use MooseX::Marlin!)

  • Imports new, does, BUILDARGS, BUILDALL, and DEMOLISHALL from Moose::Object into the caller package, if the caller package is a Moose class.

BUGS

Please report any bugs to https://github.com/tobyink/p5-marlin/issues.

SEE ALSO

Marlin, Moose.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE

This software is copyright (c) 2026 by Toby Inkster.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.

DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.