in reply to Reversing an array. Subroutine.
That won't work when one of the elements is 0, "", "0", undef, etc. Check the size of @one, not whether $entry is true or false.
while (@one) { push(@two, pop(@one)); }
Of course, using reverse would be even better.
.oO( Why doesn't pop return an empty list for an empty array, allowing while (my ($item) = pop(@array))? )
Update: For fun, a few ways to reverse a list:
my @b = reverse(@a); my @b = sub { my @rv; push(@rv, pop()) while @_; return @rv }->(@a); my @b = sub { my @rv; unshift(@rv, shift()) while @_; return @rv }->(@ +a); my @b = map { $a[-$_] } reverse 0..$#a; my @b = map { $a[-$_] } -$#a..0; my @b = map { $a[$_] } sort { $b <=> @a } 0..$#a; my @b = map { $a[$_] } sub { my @rv; push(@rv, pop()) while @_; return + @rv }->(0..$#a); my @b = map { $a[$_] } sub { my @rv; unshift(@rv, shift()) while @_; r +eturn @rv }->(0..$#a); my @b = @a[ reverse 0..$#a ]; my @b = @a[ map { -$_ } -$#a..0 ]; my @b = @a[ sort { $b <=> @a } 0..$#a ]; my @b = @a[ sub { my @rv; push(@rv, pop()) while @_; return @rv }->(0. +.$#a) ]; my @b = @a[ sub { my @rv; unshift(@rv, shift()) while @_; return @rv } +->(0..$#a) ];
I keep thinking of more, such as a counting loop...
|
|---|