On Oct 30, 2009, at 9:26 AM, Abigail wrote:

On Fri, Oct 30, 2009 at 09:05:51AM +0000, Mark Fowler wrote:
Hello,

I have in the past coded things to only discover later that someone
else has already written what I have toiled away on, only better.  So
this time, I'm asking the experts[1] first.

I have an array in Perl 5 [2].  I want *every* *other* element from
it.  There is, of course, more than one way to do it:

my @new;
foreach (my $i = 0; $i < @old; $i++) {
 push @new, $old[ $i ];
}


Assuming no duplicates or references, and an even sized list:

 my @odds  = keys   %...@old}};
 my @evens = values %...@old}};

Oh, and it won't preserve order either. But at least it's not ugly.
And it doesn't need additional variables.


Abigail  "The blue coat is mine"

Why not something lengthier like

  @evens = @list[ grep {!($_ & 1)} (0 .. $#list) ];

which should preserve order and doesn't care about list size?

Mike

--

Mike Stok <m...@stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.




Reply via email to