Hãy bắt đầu với hai khẳng định sau đây:
@a
bắt đầu ra như là một mảng trống rỗng không có yếu tố này.
$b
được gán giá trị của 10.
Bây giờ nhìn vào cấu trúc này:
@{$a[$b]}
Để hiểu chúng ta có thể bắt đầu ở giữa: $a[$b]
chỉ số nguyên tố 10 của mảng @a
.
Bây giờ chúng tôi có thể làm việc ra bên ngoài từ đó: @{...}
coi nội dung của nó là tham chiếu đến một mảng. Vì vậy, @{$a[$b]}
xử lý nội dung của phần tử 10 của mảng @a
làm tham chiếu đến một mảng ẩn danh. Tức là, giá trị vô hướng chứa trong $a[10]
là tham chiếu mảng.
Bây giờ lớp trong việc đẩy mạnh:
push @{$a[$b]}, $c;
Into the mảng vô danh tham chiếu trong phần 10 của @a
bạn đang đẩy mạnh giá trị của $c
, đó là nhân vật "a".Bạn có thể truy cập vào yếu tố đó như thế này:
my $value = $a[10]->[0]; # character 'a'
Hoặc viết tắt,
my $value = $a[10][0];
Nếu bạn đẩy giá trị khác vào @{$a[10]}
sau đó bạn sẽ truy cập vào nó tại địa chỉ:
my $other_value = $a[10][1];
Nhưng còn khoảng $a[0]
thông qua $a[9]
? Bạn chỉ đang đẩy giá trị vào $a[$b]
, là $a[10]
. Perl tự động mở rộng mảng để chứa phần tử thứ 11 đó ($a[10]
), nhưng để lại giá trị trong $a[0]
thông qua $a[9]
là undef
. Bạn nói rằng bạn đã cố gắng này:
print "@a\n";
Interpolating một mảng thành một chuỗi gây ra yếu tố của nó được in với một khoảng trống giữa mỗi người. Vì vậy, bạn không thấy điều này:
ARRAY(0xa6f328)
Bạn thấy điều này:
ARRAY(0xa6f328)
... vì có mười chỗ trước phần tử thứ 11, trong đó có một tham chiếu mảng.
Nếu bạn đang chạy script của bạn với use warnings
ở phía trên, bạn đã có thể thấy điều này thay vì:
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
Use of uninitialized value in join or string at scripts/mytest.pl line 12.
ARRAY(0xa6f328)
... hoặc một cái gì đó khá giống nhau.
cấu trúc của bạn hiện trông như thế này:
@a = (undef,undef,undef,undef,undef,undef,undef,undef,undef,undef,['a'])
Nếu bạn muốn thực sự có được một cái nhìn vào những gì một cấu trúc dữ liệu có vẻ như, thay vì sử dụng một bản in đơn giản, làm một cái gì đó như thế này:
use Data::Dumper;
print Dumper \@a;
https://metacpan.org/pod/perlreftut – melpomene