Type::Tie
Section: User Contributed Perl Documentation (3pm)
Updated: 2023-02-01
Index
Return to Main Contents
NAME
Type::Tie - tie a variable to a type constraint
SYNOPSIS
Type::Tie is a response to this sort of problem...
use strict;
use warnings;
{
package Local::Testing;
use Moose;
has numbers => ( is => "ro", isa => "ArrayRef[Num]" );
}
# Nice list of numbers.
my @N = ( 1, 2, 3, 3.14159 );
# Create an object with a reference to that list.
my $object = Local::Testing->new(numbers => \@N);
# Everything OK so far...
# Now watch this!
push @N, "Monkey!";
print $object->dump;
# Houston, we have a problem!
Just declare @N like this:
use Type::Tie;
use Types::Standard qw( Num );
ttie my @N, Num, ( 1, 2, 3, 3.14159 );
Now any attempt to add a non-numeric value to @N will die.
DESCRIPTION
This module exports a single function: "ttie". "ttie" ties a variable
to a type constraint, ensuring that whatever values stored in the variable
will conform to the type constraint. If the type constraint has coercions,
these will be used if necessary to ensure values assigned to the variable
conform.
use Type::Tie;
use Types::Standard qw( Int Num );
ttie my $count, Int->plus_coercions(Num, 'int $_'), 0;
print tied($count)->type, "\n"; # 'Int'
$count++; # ok
$count = 2; # ok
$count = 3.14159; # ok, coerced to 3
$count = "Monkey!"; # dies
While the examples in documentation (and the test suite) show type
constraints from Types::Standard, any type constraint objects
supporting the Type::API interfaces should work. This includes:
- •
-
Moose::Meta::TypeConstraint / MooseX::Types
- •
-
Mouse::Meta::TypeConstraint / MouseX::Types
- •
-
Specio
- •
-
Type::Tiny
However, with Type::Tiny, you don't even need to "use Type::Tie".
use Types::Standard qw( Int Num );
tie my $count, Int->plus_coercions(Num, 'int $_'), 0;
print tied($count)->type, "\n"; # 'Int'
$count++; # ok
$count = 2; # ok
$count = 3.14159; # ok, coerced to 3
$count = "Monkey!"; # dies
Cloning tied variables
If you clone tied variables with "dclone" from Storable, the clone
will also be tied. The Clone module is also able to successfully clone
tied variables. With other cloning techniques, your level of success may vary.
BUGS
Please report any bugs to
<http://rt.cpan.org/Dist/Display.html?Queue=Type-Tiny>.
SEE ALSO
Type::API,
Type::Tiny,
Type::Utils,
Moose::Manual::Types,
MooseX::Lexical::Types.
AUTHOR
Toby Inkster <tobyink@cpan.org>.
COPYRIGHT AND LICENCE
This software is copyright (c) 2013-2014, 2018-2019, 2022-2023 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.
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- Cloning tied variables
-
- BUGS
-
- SEE ALSO
-
- AUTHOR
-
- COPYRIGHT AND LICENCE
-
- DISCLAIMER OF WARRANTIES
-
This document was created by
man2html,
using the manual pages.
Time: 09:32:07 GMT, May 22, 2024