ارجاع (References)
ارجاع به آرایه و هش با \، دسترسی با -> و ساختارهای تودرتو.
مشکل: ساختارهای تودرتو
در پرل، آرایه داخل آرایه نمیرود مستقیم — چون @matrix = (@a, @b) لیستها را flat میکند! راهحل: ارجاع (Reference).
ساختن ارجاع با \
my @arr = (1, 2, 3);
my $ref = \@arr; { ارجاع به آرایه }
my %h = (name => "Ali");
my $href = \%h; { ارجاع به هش }
دسترسی با پیکان ->
say $ref->[0]; { 1 — عنصر آرایه }
say $href->{name}; { Ali — مقدار هش }
آرایه ناشناس [ ]
مستقیم بدون متغیر واسط:
my $aref = [1, 2, 3]; { آرایه ناشناس }
say $aref->[0]; { 1 }
my $matrix = [
[1, 2, 3],
[4, 5, 6],
];
say $matrix->[1][2]; { 6 — سطر ۱، ستون ۲ }
هش ناشناس { }
my $href = {
name => "Ali",
age => 16,
};
say $href->{name};
براخورد مهم:
[ ] ارجاع آرایه، { } ارجاع هش، ( ) لیست عادی!دِرف با @ و %
my $ref = [1, 2, 3];
say scalar @$ref; { 3 — کل آرایه }
foreach my $x (@$ref) { say $x } { پیمایش }
my $href = {a => 1};
foreach my $k (keys %$href) { say $k }
مثال: آرایه از هشها
my @students = (
{ name => "Ali", score => 18 },
{ name => "Sara", score => 15 },
);
foreach my $s (@students) {
say "$s->{name}: $s->{score}";
}
خلاصه
- \@arr و \%h ارجاع به موجود
- [ ] و { } ساخت ناشناس
- ->[i] و ->{k} دسترسی
- @$ref و %$ref دِرف کل
این مبحث بخشی از دوره آموزش کامل پرل است.