in reply to Re: Get even postion elements in an array
in thread Get even postion elements in an array

Why not be LESS cryptic, e.g.:-
my $flipflop = 1; my @result = grep { $flipflop = not $flipflop; }, @input;

One world, one people

Replies are listed 'Best First'.
Re^3: Get even postion elements in an array
by LanX (Saint) on Nov 16, 2010 at 15:52 UTC
    I prefer reusable idioms.

    Here not is indeed more readable, but it won't produce 0 for false, which could be counterintuitive in other cases.

    $flipflop needs to be declared, while $a (and $b) is already global as part of the sort idiom, which is a similar case of using a code block.

    $a=1; my @result = grep { $a = not $a }, @input;

    At the end it's a matter of taste. ^= is shorter, = not is clearer, but =1- can equally be used in most other languages, making it an universally understood idiom.

    Cheers Rolf

      Reusable idioms are an open block to your thinking. They are not the same as reusable code. '' is just as false as 0 and is often preferable -- for example, a routine returns or sets a scalar by reference originating from a unix exit code, 0 being unix success, so '' is the best value for "i had to abort earlier than that" $a is not a global, it's a special variable for use in sort blocks, that shouldn't be abused especially by habit -- one day a sort routine will come back to bite you in the bottom. Are you trying to say that not declaring locally and instead using global variables is a virtue? Many here will disagree.

      One world, one people