Hello, I'm writing a new module that exports a similar interface to Type::Tie, but performs a type check on the entire variable each time it is changed. Obviously, this is much more expensive, but it can be useful for types like Types::Standard::Dict in cases where speed is not very important.
In case you're not familiar with Type::Tie, here's a brief summary:
Type::Tie exports a single function, ttie(), which ties variables to
types. For example, after
use Type::Tie;
use Types::Standard qw(Num);
ttie my $num, Num;
setting $num to anything but a number will die. And
ttie my @num_list, Num;
only allows numbers in @num_list. So
push @num_list, "foo";
will die.
Type::Tie::Full (the working name for my module) is similar, except that
the entire variable (as a reference) is passed to the type checker. The
sole exception to this is tying scalars--in this case, the referenced
scalar will be passed to the type checker rather than the reference
itself.
For example, this works correctly:
use Type::Tie::Full;
use Types::Standard qw(Dict Optional Str Num);
ttie my %dict, Dict[string => Str, number => Optional[Num]],
string => 'foo';
$dict{string} = 'bar'; # ok
$dict{number} = 42; # ok
$dict{nonexistent} = 'foo'; # dies
$dict{number} = 'foo'; # dies
delete $dict{string}; # dies ('string' is not optional)
delete $dict{number}; # ok ('number' is optional)
Currently, only one layer of tying is performed, which means things like
the following don't work how I would like them to:
use Type::Tie::Full;
use Types::Standard qw(HashRef Num);
ttie my $hashref, HashRef[Num], {};
$hashref = { foo => 'bar' }; # dies ('bar' is not a number)
$hashref->{foo} = 'bar'; # doesn't die, but probably should
I intend to implement this using deep tying, but it doesn't work for
now.
My question is, does the name make sense for this module? I figure since
it performs a full check on the variable every time it is changed (as
opposed to a check on just the added elements), then it makes sense to
call it that. Would you agree?
And also please let me know if there's anything that should be done
differently or anything like that.
(And yes--the timezone in the Date header of this message is correct. I
need to get on a better sleep schedule!)
Thanks,
Asher
--
I have no doubt that it is a part of the destiny of the human race,
in its gradual improvement, to leave off eating animals.
-- Thoreau
GPG fingerprint: 38F3 975C D173 4037 B397 8095 D4C9 C4FC 5460 8E68
signature.asc
Description: PGP signature
