Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Smart matching for argument constraints

by LanX (Chancellor)
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:


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
Replies are listed 'Best First'.
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?

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (3)
As of 2016-05-06 05:09 GMT
Find Nodes?
    Voting Booth?