Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  

Re: regex in list context

by jakobi (Pilgrim)
on Oct 28, 2009 at 13:22 UTC ( [id://803672]=note: print w/replies, xml ) Need Help??


in reply to regex in list context

-MO=Deparse shows print "MATCHED\n" if @list = !('foo bar baz' =~ /\bbar\b/);, which explains your observation. Which I read as an implicit "cast" from scalar not to list context for the assignment, similar to @list=5 implying @list=(5).

(initially I thought about about =~ possibly being used in list context as well, but that's nonsensical).

I've problems imagining sensible semantics for an alternate implementation of list context (matching substrings) on a non-match operator like !~, so the current solution above seems sanest to me.

However man perlop could be more explicit: Binary "!~" is just like "=~" except the return value is negated in the logical sense. Elsewhere, same document: When there are no parentheses in the pattern, the return value is the list "(1)" for success. With or without parentheses, an empty list is returned upon failure.

cu & HTH, Peter -- hints may be untested unless stated otherwise; use with caution & understanding.

Replies are listed 'Best First'.
Re^2: regex in list context
by kyle (Abbot) on Oct 28, 2009 at 14:55 UTC

    I think this explains why I don't like using !~. Ages ago, it "didn't do what I expected" and I learned from this only "don't use !~". Time passed, and I forgot what I was trying to do that didn't work, but I was still avoiding !~ in places it might have worked. I think this just might explain where my superstition came from.

    Thank you!

      Now that I see the answer I remember discussing this issue and IMHO it makes some sense.

      What kind of list should be the logical result of a doesn't-match operator?

      Anyway it breaks the believe in orthogonality and that doubling negations leads to the same results...

      ... which is indeed not exceptional in perl's "DWIM universe".

      So the OP should better use unless and =~.

      Cheers Rolf

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-04-24 22:13 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found