Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re^2: Smart enough for Smart Match??? (was "Understanding ...Given/When" )

by LanX (Canon)
on Mar 04, 2010 at 17:53 UTC ( #826764=note: print w/ replies, xml ) Need Help??


in reply to Re: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
in thread Understanding the benefit of Given/When ...

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


Comment on Re^2: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
Select or Download Code
Re^3: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
by ikegami (Pope) on Mar 04, 2010 at 18:04 UTC

    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.

      extending your code shows that there is a bug when matching ARRAY ~~ REGEX, do you agree?

      use 5.010; use strict; use warnings; my @a=('abc',1); given (@a) { when (/abc/ ) { print '/abc/'."\n" ;continue} when ("abc" ) { print "abc\n" ;continue} #when (1 ) { print "#\n" ;continue} when (['abc',1]) { print "copy\n" ;continue} when (\@a ) { print "self\n" } } print "as it should be: ",@a~~/abc/;

      OUTPUT

      abc copy self as it should be 1

      Cheers Rolf

      PS: I have to go, too ...

        You need to do when (qr/abc/). when(/abc/) appears to do when($_ ~~ ($_ =~ /abc/)).
        use 5.010; use strict; use warnings; my @a=qw(abc def); given (@a) { when (/abc/ ) { say '/abc/'; continue; } when (qr/abc/) { say 'qr/abc/'; continue; } } say '--'; if (@a ~~ /abc/ ) { say '/abc/'; } if (@a ~~ qr/abc/) { say 'qr/abc/'; }
        qr/abc/ -- /abc/ qr/abc/
        The discrepency is odd, though.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (9)
As of 2014-12-26 01:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (163 votes), past polls