my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)];
my ($last_arr_index, $next_arr_index);
Si necesita conocer el índice real del último elemento, por ejemplo, que necesita para recorrer los elementos del array conocer el índice, utilice $#$
:
$last_arr_index = $#{ $arr_ref };
$last_arr_index = $#$arr_ref; # No need for {} for single identifier
Si necesita saber el índice del elemento después de la última, (por ejemplo, para completar el siguiente elemento libre sin push()
),
O necesita saber la cantidad de elementos en la matriz (que es el mismo número) que el anterior:
my $next_arr_index = scalar(@$arr_ref);
$last_arr_index = $next_arr_index - 1; # in case you ALSO need $last_arr_index
# You can also bypass $next_arr_index and use scalar,
# but that's less efficient than $#$ due to needing to do "-1"
$last_arr_index = @{ $arr_ref } - 1; # or just "@$arr_ref - 1"
# scalar() is not needed because "-" operator imposes scalar context
# but I personally find using "scalar" a bit more readable
# Like before, {} around expression is not needed for single identifier
Si lo que realmente se necesita es acceso el último elemento de la arrayref (por ejemplo, el solo razón por la que desea saber si el índice es para usar posteriormente ese índice para acceder al elemento), simplemente puede usar el hecho de que el "-1" hace referencia al último elemento de la matriz. Apoyos a la publicación de Zaid para la idea.
$arr_ref->[-1] = 11;
print "Last Value : $arr_ref->[-1] \n";
# BTW, this works for any negative offset, not just "-1".
Gracias DVK. Eso es exactamente lo que estaba pensando cuando escribí mi respuesta. – Zaid