Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Smart enough for Smart Match??? (was "Understanding ...Given/When" )

by LanX (Saint)
on Mar 04, 2010 at 15:53 UTC ( [id://826728]=note: print w/replies, xml ) Need Help??


in reply to Re: Understanding the benefit of Given/When ...
in thread Understanding the benefit of Given/When ...

> I have no idea what you are asking.

Maybe I'm not smart enough for Smart Match ;)

It seems that the operands in Smart Match are swapped to what I expected after reading the docs

Is perlsyn#Switch statements clear???

Most of the power comes from implicit smart matching: when($foo) is exactly equivalent to when($_ ~~ $foo)
($_ was given)

and

# $a $b Type of Match Implied Matching Code # ====== ===== ===================== ============= ... # Array Regex array grep grep /$b/, @$a
see perlsyn#Smart matching in detail

so when writing

given (@a) { when (/abc/) {} }

I expect this to be tested:  @a ~~ /$b/ in the meaning of  grep /$b/, @$a

Two possibilities:

a) the docs need a rewrite!

b) my brain needs a rewrite! ;)

Cheers Rolf ...still confused...

UPDATE: Sorry personally I think that ~~ is far too overloaden with functionality to be easily understood!!!

Replies are listed 'Best First'.
Re: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
by ikegami (Patriarch) on Mar 04, 2010 at 17:45 UTC
    I don't know why the following doesn't work:
    use 5.010; use strict; use warnings; my @a='abc'; given (@a) { when (/abc/ ) { print "abc\n" } when (1 ) { print "#\n" } when (['abc']) { print "copy\n" } when (\@a ) { print "self\n" } } # copy
    Why is it skipping Array Regex to go to Array Array?
      Have a look at the last code in the OP (I updated it 10 minutes after posting)

      given(@array) and given(\@array) both produce the same ref in $_, but the smartmatch doesn't work as documented.

      While I can understand why to limit given to simple scalars I think the docs should either be updated to reflect this behaviour or it's a bug.

      UPDATE: you should add continues to se which clauses are true

      my @a=('abc',1); given (@a) { when (/abc/ ) { print "abc\n" ;continue} when (1 ) { print "#\n" ;continue} when (['abc',1]) { print "copy\n" ;continue} when (\@a ) { print "self\n" } }

      OUTPUT

      Argument "abc" isn't numeric in smart match at /home/lanx/tmp/ike_give +n.pl line 9. # copy self

      Cheers Rolf

        given(@array) and given(\@array) both produce the same ref in $_

        That's fine. ARRAY means array or array ref.

        I didn't get a chance to read the thread JavaFan started, but I gotta go for a bit now.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2024-04-25 17:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found