NAME Class::XSConstructor - a super-fast (but limited) constructor in XS SYNOPSIS package Person { use Class::XSConstructor qw( name! age email phone ); use Class::XSAccessor { accessors => [qw( name age email phone )], exists_predicates => [qw( age email phone )], }; } DESCRIPTION Class::XSAccessor is able to provide you with a constructor for your class, but it's fairly limited. It basically just does: sub new { my $class = shift; bless { @_ }, ref($class)||$class; } Class::XSConstructor goes a little further towards Moose-like constructors, adding the following features: * Supports initialization from a hashref as well as a list of key-value pairs. * Only initializes the attributes you specified. Given the example in the synposis: my $obj = Person->new(name => "Alice", height => "170 cm"); The height will be ignored because it's not a defined attribute for the class. * Supports required attributes using an exclamation mark. The name attribute in the synopsis is required. * Provides support for type constraints. use Types::Standard qw(Str Int); use Class::XSConstructor ( "name!" => Str, "age" => Int, "email" => Str, "phone" => Str, ); Type constraints can also be provided as coderefs returning a boolean: use Types::Standard qw(Str Int); use Class::XSConstructor ( "name!" => Str, "age" => Int, "email" => sub { !ref($_[0]) and $_[0] =~ /\@/ }, "phone" => Str, ); Type constraints are likely to siginificantly slow down your constructor. Note that Class::XSConstructor is only building your constructor for you. For read-write attributes, *checking the type constraint in the accessor is your responsibility*. * Supports Moose/Moo/Class::Tiny-style `BUILD` methods. Including `__no_BUILD__`. CAVEATS Inheritance will automatically work if you are inheriting from another Class::XSConstructor class, but you need to set @ISA *before* importing from Class::XSConstructor (which will happen at compile time!) An easy way to do this is to use parent before using Class::XSConstructor. package Employee { use parent "Person"; use Class::XSConstructor qw( employee_id! ); use Class::XSAccessor { getters => [qw()] }; } BUGS Please report any bugs to <http://rt.cpan.org/Dist/Display.html?Queue=Class-XSConstructor>. SEE ALSO Class::Tiny, Class::XSAccessor. AUTHOR Toby Inkster <tobyink@cpan.org>. THANKS To everybody in *#xs* on irc.perl.org. COPYRIGHT AND LICENCE This software is copyright (c) 2018 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.