in reply to Re^4: Create reference to sorted anonymous array
in thread Create reference to sorted anonymous array
for my $i ($#$arrayref .. 0) { ... } does not work (initial value of a range must be <= than its terminal value) but
does and is more readable (again, IMHO).c:\@Work\Perl\monks>perl -wMstrict -le "my $arrayref = [ qw(uno dos tres quatro cinco) ]; ;; for my $i (reverse 0 .. $#$arrayref) { print qq{$i: $arrayref->[$i]}; } " 4: cinco 3: quatro 2: tres 1: dos 0: uno
Having a strange step might be handled by something like
which I would tend to favor. The only problem with this kind of loop range expression is that the complete 0 .. $#$arrayref range is built as an intermediate list, so if you're dealing with a large range of any kind you may chew up a lot of memory. The Perl compiler knows enough to optimize a for my $n (0 .. MAX) { ... } loop to the equivalent C-style for-loop, so no potentially huge list is ever generated; it can't do that trick for for my $n (grep { whatever } 0 .. MAX) { ... } or similar blocks.c:\@Work\Perl\monks>perl -wMstrict -le "my $arrayref = [ qw(uno dos tres quatro cinco) ]; ;; for my $i (grep { $_ % 2 == 0 } 0 .. $#$arrayref) { print qq{$i: $arrayref->[$i]}; } " 0: uno 2: tres 4: cinco
(Another interesting candidate for this sort of thing might be List::MoreUtils::indexes or one of its cousins; also see List::Util.)
Give a man a fish: <%-{-{-{-<
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: Create reference to sorted anonymous array
by Digioso (Sexton) on Mar 18, 2016 at 12:30 UTC | |
by Your Mother (Archbishop) on Mar 18, 2016 at 13:24 UTC |