in reply to Mini-Tutorial: Working with Odd/Even Elements

my $t = 1; grep { $t^=1 } LIST

If you're on perl-5.10 or newer, you can also use a state variable inside the block, and thus not "tainting" the outer scope:

use 5.010; say grep { state $t = 1; $t ^= 1} <a b c d>; # prints: bd

Replies are listed 'Best First'.
Re^2: Mini-Tutorial: Working with Odd/Even Elements
by ikegami (Pope) on Jul 09, 2009 at 19:22 UTC
    That's not very useful outside of one-liners since it'll remember the state from the previous loop pass or function call.
Re^2: Mini-Tutorial: Working with Odd/Even Elements
by JavaFan (Canon) on Jul 09, 2009 at 19:02 UTC
    $ perl -wE 'say grep {state $t ^= 1} qw[a b c d]' ac $
      oops...
      $ perl -de 1 ... DB<1> use 5.010; sub a { grep { state $t ^= 1 } @_ } DB<2> x a(1..5) 0 1 1 3 2 5 DB<3> x a(1..5) 0 2 1 4
        That's a feature! You first get the odd elements, then the evens! ;-) ;-)