Mảng đặc biệt, @_
, trong đó tất cả các đối số được truyền cho một hàm có mặt, thực sự là một bí danh đối với các đối số được truyền. Do đó, bất kỳ thay đổi nào chúng tôi thực hiện trực tiếp với mảng đặc biệt này @_
cũng sẽ phản ánh trong chính. Điều này rõ ràng.Perl: mảng đặc biệt @_ không thực sự là bí danh?
#!/usr/bin/perl
use warnings;
use strict;
$\="\n";
sub func {
print \@_;
$_++ for(@_);
}
my @arr=(2..4);
print \@arr;
func(@arr);
print "@arr";
Đối với chương trình trên, tôi mong đợi các tài liệu tham khảo của @arr
và @_
để trỏ đến cùng một vị trí vì nó là một bí danh. Nhưng nó không phải là như vậy.
On chạy trên:
ARRAY(0x1b644d0)
ARRAY(0x1b644e0)
3 4 5
Nếu họ đang trỏ đến 2 địa điểm khác nhau, làm thế nào những thay đổi được thực hiện trong @_
được phản ánh trong @arr
?
Tôi có thấy điều gì đó sai không? Làm ơn cho lời khuyên.
'@ _' không phải là bí danh cho bất kỳ điều gì. Đó không phải là những gì tài liệu nói. * Các phần tử * riêng lẻ của '@ _' là các bí danh. –