בחלק זה של המדריך לפרל נלמד על מערכים בפרל. נתחיל בסקירה כללית על מערכים ואיך הם עובדים בפרל. בהמשך נראה הסברים מפורטים יותר.

שמות משתנים של מערכים בפרל תמיד מתחילים בסימן: @.

כיוון שאנחנו מתעקשים להשתמש ב strict יש להכריז על המשתנים באמצעות מלת המפתחhl>my לפני השימוש הראשון בהם.

זיכרו שכל הדוגמאות מניחות שהקובץ שלכם מתחיל כך:

use strict;
use warnings;
use 5.010;

הכרזה על מערך:

my @names;

הכרזה על מערך חהצבת ערכים במערך:

my @names = ("Foo", "Bar", "Baz");

בדיקת ערכים במערך

use Data::Dumper qw(Dumper);

my @names = ("Foo", "Bar", "Baz");
say Dumper \@names;

הפלט הוא:

$VAR1 = [
        'Foo',
        'Bar',
        'Baz'
      ];

לולאות foreach ומערכים בפרל

my @names = ("Foo", "Bar", "Baz");
foreach my $n (@names) {
  say $n;
}

התואצה היא הדפסת:

Foo
Bar
Baz

גישה לאלמנט במערך

my @names = ("Foo", "Bar", "Baz");
say $names[0];

שימו לב שכאשר ניגשים לאלמנט בודד במערך הסיגיל ההתחלתי משתנה מ- @ ל- $. במבט ראשון זה עלול לבלבל, אבל אם חושבים על זה, אז הסיבה ברורה.

@ מסמן רבים ו- $ מסמן יחיד. כשניגשים לאלמנט בודד במערך הוא מתנהג בדיוק כמו משתנה סקלרי.

אינדקסים במערך

אינדקסים של מערך מתחילים מ-0 האינדקס הגדול ביותר במערך תמיד יימצא במשתנה שנקרא $#name_of_the_array. ולכן

my @names = ("Foo", "Bar", "Baz");
say $#names;

ידפיס 2 כיוון שהאינדקסים הם 0,1 ו-2

האורך, או הגודל של מערך

בפרל אין פונקציה שמיועדת להחזיר את גודלו של מערך, אבל יש מספר דרכים להשיג את הנתון. גודלו של המערך הוא תמיד אחד יותר מהאינדקס הגדול ביותר. במקרה שראינו $#names+1 הוא הגודל או האורך של המערך.

אפשרות נוספת היא להשתמש בפונקציה scalar כדי לקבל את גודלו של המערך:

my @names = ("Foo", "Bar", "Baz");
say scalar @names;

ידפיס 3.

הפונקציה scalar היא מעין פונציית המרה, שבין היתר, ממירה מערך לערך סקלרי. עקב החלטה שרירותית, אך נבונה, ההמרה מחזירה את גודלו של המערך.

שימוש בלולאה כדי לעבור על האינדקסים של המערך

קיימים מקרים שבהם מעבר על ערכי המערך אינו מספיק. ייתכן שנצטרך גם את הערך וגם את האינדקס של הערך. במקרה כזה נצטרך לרוץ בלולאה על האינדקסים, ולקבל את הערכים באמצעות האינדקסים:

my @names = ("Foo", "Bar", "Baz");
foreach my $i (0 .. $#names) {
  say "$i - $names[$i]";
}

מדפיס:

0 - Foo
1 - Bar
2 - Baz

Push למערך פרל

push מוסיף ערך חדש בסוף המערך, ובכך מגדיל את המערך:

my @names = ("Foo", "Bar", "Baz");
push @names, 'Moo';

say Dumper \@names;

התוצאה היא:

$VAR1 = [
        'Foo',
        'Bar',
        'Baz',
        'Moo'
      ];

Pop ממערך פרל

pop לוקח את האלמנט האחרון של מערך:

my @names = ("Foo", "Bar", "Baz");
my $last_value = pop @names;
say "Last: $last_value";
say Dumper \@names;

התוצאה היא:

Last: Baz
$VAR1 = [
        'Foo',
        'Bar',
      ];

shift על מערך פרל

shift מחזיר את הערך השמאלי ביותר של המערך ומזיז את כל שאר האלמנטים מקום אחד שמאלה.

my @names = ("Foo", "Bar", "Baz");

my $first_value = shift @names;
say "First: $first_value";
say Dumper \@names;

התוצאה היא:

First: Foo
$VAR1 = [
        'Bar',
        'Baz',
      ];