ارجاع (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}";
}

خلاصه

این مبحث بخشی از دوره آموزش کامل پرل است.

ابزارهای مرتبط