Beefy Boxes and Bandwidth Generously Provided by pair Networks Frank
Syntactic Confectionery Delight
 
PerlMonks  

Comment on

( #3333=superdoc: print w/ replies, xml ) Need Help??

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

In reply to Re^5: Pre/post subroutine assertions and documentation module? by tobyink
in thread Pre/post subroutine assertions and documentation module? by suaveant

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • Outside of code tags, you may need to use entities for some characters:
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.
  • Log In?
    Username:
    Password:

    What's my password?
    Create A New User
    Chatterbox?
    and the web crawler heard nothing...

    How do I use this? | Other CB clients
    Other Users?
    Others cooling their heels in the Monastery: (11)
    As of 2013-06-19 09:04 GMT
    Sections?
    Information?
    Find Nodes?
    Leftovers?
      Voting Booth?

      How many continents have you visited?









      Results (651 votes), past polls