List::Util is a core Perl module (ships with Perl) and provides a subroutine called first. That subroutine returns the actual element. But if you treat indexes as elements and reverse them you can get what you need:
#!/usr/bin/env perl use strict; use warnings; use List::Util qw(first); my @array = (1,1,1,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,5,6); my $idx = first {$array[$_] == 4} reverse 0..$#array; print "$idx\n";
If non-Core modules are allowed, which they ought to be, you can use List::MoreUtils, which provides lastidx, in which case you could do this:
#!/usr/bin/env perl use strict; use warnings; use List::MoreUtils qw(lastidx); my @array = (1,1,1,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,5,6); my $idx = lastidx {$_ == 4} @array; print "$idx\n";
If you don't want to use a module, just do this:
#!/usr/bin/env perl use strict; use warnings; my @array = (1,1,1,2,2,2,2,2,3,3,3,4,4,4,4,4,4,5,5,6); my $idx; for (reverse 0..$#array) { if ($array[$_] == 4) { $idx = $_; last; } } print "$idx\n";
And then repent for not being willing to use a module (even though this is quite easy to solve without).
Dave
In reply to Re: Find last position of an element in array
by davido
in thread Find last position of an element in array
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |