in reply to Re^3: Merge 2 strings like a zip [unzip()]
in thread Merge 2 strings like a zip

You're welcome.

Regarding the for statement modifier, I think ++hexcoder has covered most of this in his response.

That's a fairly common Perl idiom that you're likely to see a lot. In fact, my usage wasn't the first in this thread: BrowserUk's zip() code has '... for split '', $b;'.

There's a bit more going on behind the scenes.

print for unzip('AaBbCcDdEeFGHIJ', 5);

is equivalent to

for (unzip('AaBbCcDdEeFGHIJ', 5)) { print STDOUT "$_\n"; }

-- Ken

Replies are listed 'Best First'.
Re^5: Merge 2 strings like a zip [unzip()]
by tel2 (Pilgrim) on Jul 10, 2015 at 00:39 UTC
    Thanks for that explanation, Ken.

    I was aware of what "print for..." does (though I didn't realise some of the finer points you've mentioned), but I asked because I thought your code also worked without the 'for'.  I now notice that the output without the 'for' has no newline between the returned arguments, i.e.:
       ABCDEFGHIJabcde
    which I assume is because it's just printing the 2 arguments (like a list) together.

    All that makes sense now though (I think), thanks.

    Sorry I wasn't clearer with my last question.

      No worries. And, yes, your assumption is correct. Alternatives might be

      print join "\n", unzip('AaBbCcDdEeFGHIJ', 5);

      or the completely mad and hairy

      { local $" = "\n"; print "@{[unzip('AaBbCcDdEeFGHIJ', 5)]}"; }

      which, of course, you'd never consider doing, would you? :-)

      -- Ken

        Thanks Ken.

        Correct - I would not do that.  I does my head in.