Ответ 1
my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)];
my ($last_arr_index, $next_arr_index);
Если вам нужно знать фактический индекс последнего элемента, например, вам нужно перебрать элементы массива, зная индекс, используйте $#$
:
$last_arr_index = $#{ $arr_ref };
$last_arr_index = $#$arr_ref; # No need for {} for single identifier
Если вам нужно знать индекс элемента после последнего (например, для заполнения следующего свободного элемента без push()
),
ИЛИ вам нужно знать количество элементов в массиве (то же число), что и выше:
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 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
Если вам действительно нужно получить доступ к последнему элементу arrayref (например, причина только), которую вы хотите знать, индекс должен позже использовать этот индекс для доступа элемент), вы можете просто использовать тот факт, что индекс "-1" относится к последнему элементу массива. Опоры для Зайда для идеи.
$arr_ref->[-1] = 11;
print "Last Value : $arr_ref->[-1] \n";
# BTW, this works for any negative offset, not just "-1".