Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
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 making s'mores by the fire in the courtyard of the Monastery: (4)
As of 2015-07-07 07:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (87 votes), past polls