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'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
Если вам действительно нужно получить доступ к последнему элементу в arrayref (например, причина , по которой вы хотите знать индекс, - это позднее использовать этот индекс для доступа к элементу ), вы можете просто использовать тот факт, что индекс «-1» относится к последнему элементу массива. Подсказки к посту Заида за идею.
$arr_ref->[-1] = 11;
print "Last Value : $arr_ref->[-1] \n";
# BTW, this works for any negative offset, not just "-1".