my $arr_ref = [qw(Field3 Field1 Field2 Field5 Field4)];
my ($last_arr_index, $next_arr_index);
Nếu bạn cần biết chỉ số thực tế của yếu tố cuối cùng, ví dụ bạn cần để lặp qua các phần tử của mảng biết chỉ số, sử dụng $#$
:
$last_arr_index = $#{ $arr_ref };
$last_arr_index = $#$arr_ref; # No need for {} for single identifier
Nếu bạn cần biết chỉ mục của phần tử sau phần tử cuối cùng (ví dụ để điền phần tử miễn phí tiếp theo mà không cần push()
),
HOẶC bạn cần biết số lượng phần tử trong mảng (đó là cùng một số) như trên:
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
Nếu những gì bạn thực sự cần là truy cập yếu tố cuối cùng trong arrayref (ví dụ chỉ chỉ lý do bạn muốn biết chỉ mục sau này sử dụng chỉ mục đó để truy cập phần tử), bạn có thể chỉ cần sử dụng thực tế là chỉ mục "-1" đề cập đến phần tử cuối cùng của mảng. Đạo cụ cho bài viết của Zaid cho ý tưởng.
$arr_ref->[-1] = 11;
print "Last Value : $arr_ref->[-1] \n";
# BTW, this works for any negative offset, not just "-1".
Cảm ơn DVK. Đó là chính xác những gì tôi đã suy nghĩ khi tôi viết xuống câu trả lời của tôi. – Zaid