NAME
Basic::Types::XS - The great new Basic::Types::XS!
VERSION
Version 0.06
SYNOPSIS
package Test;
use Moo;
use Basic::Types::XS qw/Str Num Int ArrayRef HashRef/;
has string => (
is => 'ro',
isa => Str,
required => 1,
);
has num => (
is => 'ro',
isa => Num,
);
has int => (
is => 'rw',
isa => Int,
);
has array => (
is => 'ro',
isa => ArrayRef,
default => sub { return [] },
);
has hash => (
is => 'ro',
isa => HashRef,
default => sub { return {} },
);
1;
EXPORT
This module exports type constraints that can be used to validate and coerce values in your Perl code. You can import the types you need by specifying them in the use
statement:
use Basic::Types::XS qw/Str Num Int ArrayRef HashRef/;
Type Options
Each type constraint can be used directly as a function to validate values, or you can create a type constraint with options. For example, to create a type constraint for a string with custom options:
use Basic::Types::XS qw/Str/;
my $Str = Str(
default => sub { return "default value" },
coerce => sub {
my $value = shift;
return join ",", @{$value} if ref $value eq "ARRAY";
return $value;
},
message => "This is a custom error message",
);
$Str->("abc"); # Validates and returns "abc"
$Str->(undef); # Returns "default value"
$Str->([qw/a b c/]); # Coerces array to string "a,b,c"
$Str->({}); # Throws an error with custom message
default
- A coderef to provide a default value if the input is undefinedcoerce
- A coderef to coerce the input value before validationmessage
- A custom error message string
Any
Absolutely any value passes this type constraint (even undef).
Any->("abc");
Defined
Only undef fails this type constraint.
Defined->("abc");
Bool
Values that are reasonable booleans. Accepts 1, 0, "", undef, \1, \0, \"", \undef
Bool->(1);
Str
Values that are valid strings, this includes numbers.
Str->("abc");
Num
Values that are valid numbers, this incldues floats/doubles.
Num->(123.456);
Int
Values that are valide integers.
Int->(123);
Ref
Values that contain any reference
Ref->({ ... });
ScalarRef
Values that contain a scalar reference.
ScalarRef->(\"abc");
ArrayRef
Values that contain array references.
ArrayRef->([qw/a b c/]);
HashRef
Values that contain hash references
HashRef->({ a => 1, b => 2, c => 3 });
CodeRef
Values that contain code references
CodeRef->(sub { return 'abc' });
RegexpRef
Value that contain regexp references
RegexpRef->(qr/abc/);
GlobRef
Value that contain glob references
my $open, '>', 'abc.txt';
GlobRef->($open);
METHODS
validate
Returns the validation function for the type constraint. This function can be used to validate values against the type constraint.
Str->validate->("abc");
BENCHMARK
The following benchmark is between Types::Standard with Type::Tiny::XS installed and Basic::Types::XS.
use Benchmark qw(:all :hireswallclock);
use Types::Standard;
use Basic::Types::XS;
my $r = timethese(1000000, {
'Basic::Types::XS' => sub {
my $Str = Basic::Types::XS::Str->('123');
my $Num = Basic::Types::XS::Num->(123);
my $Int = Basic::Types::XS::Int->(123);
my $Array = Basic::Types::XS::ArrayRef->([qw/1 2 3/]);
my $Hash = Basic::Types::XS::HashRef->({ a => 1, });
my $Code = Basic::Types::XS::CodeRef->(sub { return 1 });
},
'Types::Standard' => sub {
my $Str = Types::Standard::Str->('123');
my $Num = Types::Standard::Num->(123);
my $Int = Types::Standard::Int->(123);
my $Array = Types::Standard::ArrayRef->([qw/1 2 3/]);
my $Hash = Types::Standard::HashRef->({ a => 1, });
my $Code = Types::Standard::CodeRef->(sub { return 1 });
},
});
Benchmark: timing 1000000 iterations of Basic::Types::XS, Types::Standard...
Basic::Types::XS: 2.22538 wallclock secs ( 2.20 usr + 0.04 sys = 2.24 CPU) @ 446428.57/s (n=1000000)
Types::Standard: 3.23532 wallclock secs ( 3.23 usr + 0.00 sys = 3.23 CPU) @ 309597.52/s (n=1000000)
Rate Types::Standard Basic::Types::XS
Types::Standard 309598/s -- -31%
Basic::Types::XS 446429/s 44% --
AUTHOR
LNATION, <email at lnation.org>
BUGS
Please report any bugs or feature requests to bug-basic-types-xs at rt.cpan.org
, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Basic-Types-XS. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
SUPPORT
You can find documentation for this module with the perldoc command.
perldoc Basic::Types::XS
You can also look for information at:
RT: CPAN's request tracker (report bugs here)
Search CPAN
ACKNOWLEDGEMENTS
LICENSE AND COPYRIGHT
This software is Copyright (c) 2025 by LNATION.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)