Hi all, thanks for the quick answers :)
first of all, despite my attempt to clear things up with an example, I failed :) What I wante is "every other element, beginning with the first", so : ( 'foo', 3, 42, 'bar) should become ( 'foo', 42). Indeed grep is much better. As the code is used in a more complex structured I got lost and confused and ended up using map, blah. $|-- was what I was looking for :) About golfing and strictness I am well aware that the two are incompatible. What I originally meant is to get something with a sane balance between the two. Finally, one question : why is $|-- not recommended in production, if the following conditions are met : I'm not running in threads, not in an event-loop that might be affected by $| being set, and I'll take care of resetting $| appropriately at the end. Even in this case, wouldn't you recommend using $| ? Thanks again On 16 May 2012 13:36, Peter Makholm <pe...@makholm.net> wrote: > Peter Makholm <pe...@makholm.net> writes: > >> damien krotkine <dkrotk...@gmail.com> writes: >> >>> I'm using this code to get a list of only the odd elements of an >>> array. The resulting list must have the same order as the array. >>> >>> map { state $f; ($_) x (++$f%2) } @array; > > Wow, you asked for golfing advice in the subject and a nice solution in > the actual text. Those requirements are quite often very incompatible. > >> If you want only to get some elements of a list is is much more obvious >> to use grep instead of map: >> >> grep { ++$f%2 } @array > > This is probably as nice as it gets. For strictness I would just declare > $f as a lexical variable just outside the grep. But asking for golfing > advice is not compliant with strictness or niceness. > >> And remove unneeded syntax >> >> grep$|--,@array > > I think this would be the golfing solution, but as with everything alse > related to perl golfing don't use it in production code. > > //Makholm >