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

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

by ikegami (Patriarch)
on Mar 04, 2010 at 18:04 UTC ( [id://826770]=note: print w/replies, xml ) Need Help??


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

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.

  • Comment on Re^3: Smart enough for Smart Match??? (was "Understanding ...Given/When" )

Replies are listed 'Best First'.
Re^4: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
by LanX (Saint) on Mar 04, 2010 at 18:10 UTC
    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.
        But it is documented.

        But when EXPR is one of the below exceptional cases, it is used directly as a boolean:

        • [...]
        • a regular expression match, i.e. /REGEX/ or $foo =~ /REGEX/, or a negated regular expression match (!/REGEX/ or $foo !~ /REGEX/).
        • [...]

        It makes sense. It allows

        given ($x) { when (/abc/) { ... } when (/def/) { ... } when (/ghi/) { ... } }

        to mean

        if ($x =~ /abc/) { ... } elsif ($x =~ /def/) { ... } elsif ($x =~ /ghi/) { ... }

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (6)
As of 2024-03-29 15:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found