NetWallah has asked for the wisdom of the Perl Monks concerning the following question:

Gentle monks ..

The following 2 items produce the desired result:

~$ perl -E 'my @x=({uno=>'one'},{dos=>'two'},{tres=>'three'}); map {sa +y} keys %$_ for @x'
~$ perl -E 'my @x=({uno=>'one'},{dos=>'two'},{tres=>'three'}); say ke +ys %$_ for @x'
But if I try to apply 'for' to the result of 'keys' (at least that is my intent), I get:
~$ perl -E 'my @x=({uno=>'one'},{dos=>'two'},{tres=>'three'}); say for + keys %$_ for @x' syntax error at -e line 1, near "$_ for "
Using a more verbose, structured 'for' works fine, and is more readable, but I'm curious as to what the syntax error is trying to tell me, and if there is a concise way to accomplish this.

I know I could do 'say keys ..' as in the second case, but what if I wanted to process each key, one at a time ?

             My goal ... to kill off the slow brain cells that are holding me back from synergizing my knowledge of vertically integrated mobile platforms in local cloud-based content management system datafication.

Replies are listed 'Best First'.
Re: Syntax error in Nested for
by Athanasius (Archbishop) on Jul 03, 2013 at 03:07 UTC
      Ah ! - Thanks - I see it as the very first statement in the docs:
      Any simple statement may optionally be followed by a SINGLE modifier,. +..

                   My goal ... to kill off the slow brain cells that are holding me back from synergizing my knowledge of vertically integrated mobile platforms in local cloud-based content management system datafication.

Re: Syntax error in Nested for
by Laurent_R (Canon) on Jul 03, 2013 at 11:57 UTC

    In this specific case, since say and print are list operators, you could make it simpler:

     say keys %$_ for  @x;

      I would assume that NetWallah already knows that, as it is used in his second codesnippet.

        Right, I had not paid attention to that.