dwww Home | Manual pages | Find package

Type::Tie(3pm)        User Contributed Perl Documentation       Type::Tie(3pm)

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.

perl v5.36.0                      2023-02-01                    Type::Tie(3pm)

Generated by dwww version 1.15 on Thu Jun 20 14:25:53 CEST 2024.