http://qs321.pair.com?node_id=1054192


in reply to Re^3: Capturing regex from map
in thread Capturing regex from map

I think you're wrong about clearer.

But bedsides that, it does not do (and cannot me made to do), the same thing:

@a = map{ m[(..)(.)]g } 'the quick brown fox', 'jumps over the lazy do +g';; print @a;; th e q u ic k b r ow n f o ju m ps ov e r t he la z y d @a = map{ m[(..)(.)]g; $1 || () } 'the quick brown fox', 'jumps over t +he lazy dog';; print @a;; th ju

Perl is context sensitive. If you do not understand what that is, or try ignore it, you will never make best use of Perl.

On the other hand, if you take a few hours or days to understand context sensitivity, the OPs code is clear, concise, and very readable.

And very powerful. It requires many extra, contorted (and ultimately redundant) lines of code to achieve the same thing without using the effects of list context. It is a tool, that once you've realised its powerful simplicity, you will not want to do without.


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^5: Capturing regex from map
by LanX (Saint) on Sep 15, 2013 at 18:57 UTC
    Well the OP had only one grouping and no /g modifier, such that it does the same thing.

    DB<120> @a = map { /(\w*a\w*)/;$1||() } `ls` => ( "babel", "emacs1000", "lanx", "lanx", "seahorse", "man", "Tracker", "virtual", ) DB<121> @a = map { /(\w*a\w*)/ } `ls` => ( "babel", "emacs1000", "lanx", "lanx", "seahorse", "man", "Tracker", "virtual", )

    update

    FWIW: As already posted my approach to clarify whats happening is

    map { my @matches = /.../ ; @matches } LIST or even map { my @matches = /.../ } LIST

    Cheers Rolf

    ( addicted to the Perl Programming Language)

      OP had only

      Indeed. Equally, the OP didn't use a void context and a capture variable per Re: Capturing regex from map, but that didn't stop you posting a polemic troll falsely equating the two (despite that you'd already pointed out they were not the same) for no reason other than to have a personal dig.

      The difference between your post and mine, is that mine is intended to point out that the construct -- a regex within the list context of a map assigning to an array -- is very powerful, even beyond the simple use the OP put it to. And that if you take the time to understand why the OPs example works, then the other more powerful uses -- such as the one I demonstrated -- are equally easy to understand and therefore utilise.

      FWIW:

      Not very much. Actually, a negative amount.

      All you did was put the regex into a localised list context by constructing a scoped array; and then convert that array to the list that would have been constructed had you left things alone. That's pointless make-work.

      Anyone who understands that assigning a regex to an array assigns the captures; is equally capable of understanding that the same regex in the list context of a map statement assigned to an array will do the exact same thing.

      You understand it. But you somehow think that other people won't. That you have to clarify the obvious for them by some utterly pointless make-work. You are advocating that 'other people' should dumb down their code, because some other 'other people' might not understand it like you do.

      Suggestion: do not seek to intellectually diminish those 'other people'; seek to educate them.

      If you can understand; and I can understand it; it is a fair bet that with just a little exposure; they will understand it too. It's neither that complicated, nor undocumented.


      With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        Anyone who understands that assigning a regex to an array assigns the captures; is equally capable of understanding that the same regex in the list context of a map statement assigned to an array will do the exact same thing.

        Understanding either or both does not make the OP's code a shining beacon of clarity, IMO.