Here's another "What's a quick and real neat way of...." type question
Ewen McNeill
ewen at naos.co.nz
Thu Nov 14 16:25:09 CST 2002
In message <5FA042F680739D44951B00FED8BE1A7D06A091 at dasher.webdom1.web.co.nz>, "S
haun McCarthy" writes:
>In which case I think:
>
>while (@a && my($a, $b) = (shift @a, shift @b)) {
>}
my $len = ((scalar @a) <= (scalar @a) ? (scalar @a) : (scalar @b));
for (my $i = 0; $i < $len; ++$i)
{
my ($a, $b) = (@a[$i], @b[$i]);
}
or if you're willing to destroy @a and @b in the process (it seems
everyone is):
while ((scalar @a) > 0 && (scalar @b) > 0)
{
my ($a, $b) = (shift @a, shift @b);
}
(This second one will be expensive if scalar(@array) is O(n); ISTR that perl
uses an array structure that means that scalar(@array) is O(1).)
Just because you can somehow cram everything onto one line doesn't mean
that you _have_ to do so :-) But if you feel you really must...
while ((scalar @a) > 0 && (scalar @b) > 0 && (($a, $b) = (shift @a,shift @b)))
{
# body goes here
}
And so I don't get left out of the "bizzare ways to do this"
competition:
@c = map { print "$a[$_], $b[$_]\n" } (0..((scalar @a)-1));
Ewen
More information about the Wellington-pm
mailing list