subtype 'SmallInt'
=> as 'Int'
=> where { $_ < 10 };
It allows the declaration of named parameters, and required and optional parameters.
This seems to meet the "I want something that verifies incoming parameters" part of the quest.
The reason I suggest that it's mostly useful for subs that are intended to be called as methods, rather than as functions, is that the declaration syntax offers certain shortcuts that make the assumption that the first parameter to will be a blessed object, and that the function body will want to refer to it as "$self".
class Person
{
# ...
method thank (Person $person)
{
# ...
}
method accept_gift (Gift $gift)
{
$self->push_posession($gift);
$self->thank($gift->giver);
}
}
my $me = Person->new;
my $bob = Person->new;
my $dog = Gift->new(giver => $me, item => Puppy->new);
$bob->accept_gift($dog); # ok
Person::accept_gift($bob, $dog); # ok
Person::accept_gift($dog); # dies
|