Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Smart matching for argument constraints

by LanX (Canon)
on Sep 03, 2012 at 13:45 UTC ( #991434=perlquestion: print w/ replies, xml ) Need Help??
LanX has asked for the wisdom of the Perl Monks concerning the following question:

Hi

I'm considering using the smart macht operator for argument constraints at the start of a sub.

I have to admit that ~~ still confuses me a lot

is the following code correct to check if

1. the argument is a simple scalar (that is no ref) 2. and element of the given set (here a b c)?

sub tst { %arg = @_; warn "wrong argument" unless "$arg{x}" ~~ [qw/a b c/] ; }

so e.g. tst(x => "a"); is ok.

the explicit stringification (quotes) of "$arg{x}" is necessary to avoid tst(x => [qw/a b c/]); to be legal.

Any comments? Any better idioms for checking arguments?

Cheers Rolf

Comment on Smart matching for argument constraints
Select or Download Code
Re: Smart matching for argument constraints
by mithaldu (Monk) on Sep 03, 2012 at 14:30 UTC
      Thanks, this reflects my general suspicion towards smart matching...!

      Cheers Rolf

Re: Smart matching for argument constraints
by tobyink (Abbot) on Sep 04, 2012 at 06:53 UTC

    Personally I'd make the intent a little more obvious:

    warn "wrong argument" if ref $arg{x} || !($arg{x} ~~ [qw/a b c/]);
    perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://991434]
Approved by Athanasius
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2014-08-29 23:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (289 votes), past polls