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

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.

Replies are listed 'Best First'.
Re^6: Smart enough for Smart Match??? (was "Understanding ...Given/When" )
by ikegami (Patriarch) on Mar 04, 2010 at 19:17 UTC
    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/) { ... }
      What...

      OMG it took me a while to understand it ... yes it makes sense:

      use 5.010; use strict; use warnings; my @a=('abc'); given (@a) { print "$_\n"; when (/ARRAY/ ) { print "ARRAY\n" ;continue} # regex-match! when (/abc/ ) { print '/abc/'."\n" ;continue} # no match when (qr/abc/ ) { print 'qr/abc/'."\n" ;continue} # smart-match! }

      OUTPUT:

      ARRAY(0x8255a70) ARRAY qr/abc/

      Sigh ... do you agree that the docs could be more explicit? :)

      Cheers Rolf

        It's right after where it documents when($foo) is equivalent to when($_ ~~ $foo), and "/REGEX/" does appears. That's quite explicit.

        Now, maybe it could possibly be clearer. Documentation improvements are always welcome, especially from those who were confused by them. The latest version is available here. Submit a diff -u of your suggestion to perlbug@perl.org.