Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Re^5: Pre/post subroutine assertions and documentation module?

by tobyink (Canon)
on Jan 12, 2012 at 21:52 UTC ( #947650=note: print w/replies, xml ) Need Help??

in reply to Re^4: Pre/post subroutine assertions and documentation module?
in thread Pre/post subroutine assertions and documentation module?

MooseX::Declare and its ilk allow the arguments to a method and (somewhat experimentally) the return value, to be declared in terms of Moose type constraints. A type constraint can use arbitrary code to verify that a value meets it.

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

Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://947650]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (6)
As of 2022-12-01 19:44 GMT
Find Nodes?
    Voting Booth?