Perl

Perl (פרל) היא שפת תכנות דינמית שתוכננה במקור על ידי לארי וול. לאחר שנטבע השם Perl, יוחסו לו ראשי תיבות בדיעבד של "Practical Extraction and Report Language".

קוד המקור של המפרש וסביבת הריצה של Perl מופצים כתוכנה חופשית תחת הרישיון הציבורי הכללי של גנו ו-Artistic License.

== סקירה ==
מסמך perlintro מתוך התיעוד הרשמי של השפה מציין:

:Perl היא שפת תכנות למטרות כלליות שפותחה במקור לעיבוד טקסט וכעת נעשה בה שימוש למגוון רחב של מטרות כולל ניהול מערכת, תכנות ל-Web, תכנות לרשתות, פיתוח ממשקי משתמש גרפיים (GUI), ועוד.

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

== היסטוריה ==
לארי וול החל לעבוד על Perl ב-1987 ושחרר את גרסה 1.0 לקבוצת הדיון comp.sources.misc ב-18 בדצמבר 1987. השפה התרחבה במהירות בשנים לאחר מכן. ל-Perl 2 ששוחררה ב-1988, היה מנוע ביטויים רגולריים טוב יותר. Perl 3, ששוחררה ב-1989, הוסיפה יכולת טיפול במידע בינארי, בנוסף לטקסטואלי.

עד 1991, התיעוד היחידי ל-Perl היה דף man יחיד, שהלך והתארך. ב-1991 פורסם הספר "Programming Perl", שמכונה "ספר הגמל" על שם הגמל שהציבה הוצאת הספרים O'Reilly על כריכתו. הספר הפך עם הזמן לתיעוד דה פקטו של השפה ושל המפרש שלה. גרסת Perl קודמה ל-4, לא כדי לציין שינוי משמעותי בשפה, אלא כדי לציין את הגרסה שתועדה בספר.

Perl 4 עברה מספר גרסאות תחזוקה, עד גרסה Perl 4.036 ב-1993. בשלב זה נטש וול את Perl 4 כדי להתחיל לעבוד על Perl 5. Perl 4 נותרה בגרסה 4.036 עד היום.

=== Perl 5 ===
הפיתוח של Perl 5 המשיך ב-1994. רשימת הדיוור "perl5-porters" הוקמה במאי 1994 כדי לתאם את המאמץ של הסבת Perl 5 למערכות השונות. רשימת הדיוור נשארה הפורום הראשי של פיתוח, תחזוקה, והסבה של Perl 5.

Perl 5 שוחררה ב-17 באוקטובר 1994. הגרסה כללה שכתוב כמעט מחדש של המפרש, והוסיפה תכונות חדשות רבות לשפה, כולל אובייקטים, מצביעים, מרחבי-שמות ומודולים. המודולים משמשים אמצעי להרחבת השפה בלי צורך לשנות את המפרש. אופן פעולה זה איפשר לליבת המפרש להתייצב, כשתוך כך נוספים מאפיינים נוספים לשפה, בעזרת המודולים, שהם למעשה ספריות בינאריות, וברוב המקרים כתובות ב-C.

באוקטובר 1995 הוקמה CPAN (ראשי תיבות של Comprehensive Perl Archive Network). CPAN היא אוסף של אתרים שאוגרים ומפיצים קוד מקור של Perl, הפצות בינאריות, תיעוד, ומודולים. במקור, היה צריך לגשת לכל אתר ב-CPAN דרך הכתובת הייחודית שלו; כיום הכתובת היחידה http://www.cpan.org/ מפנה אוטומטית לאתר CPAN כלשהו.

נכון לשנת 2021, פרל 5 מתוחזקת באופן פעיל. היא כוללת תמיכה ביוניקוד. הגרסה היציבה האחרונה היא Perl 5.32.1.

ביוני 2020 הוכרזה<ref>[https://www.perl.com/article/announcing-perl-7/ Announcing Perl 7 on Perl.com]</ref> פרל 7 כממשיכה של פרל 5. להבדיל מפרל 6 (Raku), פרל 7 תהיה המשך ישיר של הגרסה האחרונה של פרל 5, עם ברירות מחדל אחרות, אך עם אפשרות לתאימות לאחור.

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

Perl איננה שפת מפרש או שפה מהודרת. זאת מכיוון שהיא אינה משתמשת במהדר על מנת ליצור קובצי ריצה בינאריים, אלא טוענת את ליבת המפרש עצמו לזיכרון. ליבת המפרש ממירה בתחילת הריצה (ובמקרים מסוימים גם בהמשכה) את הקוד שנכתב על ידי המתכנת לשפת מכונה. למרות זאת, תוכנית בשפת Perl מכונה תסריט (באנגלית: script; סקריפט), כפי שמכונות תוכניות הכתובות בשפת מפרש.

בימיו הראשונים של האינטרנט, הרבה פעילות צד השרת בוצעה על ידי תסריטים ב-Perl. הפופולריות של Perl ביישומי רשת קטנה באופן משמעותי לטובת טכנולוגיות אחרות, דוגמת PHP, ASP, ASP.NET, פייתון ו-Java.

כמעט כל הפצת לינוקס כוללת Perl, וחלק מ-GNU coreutils כתוב ב-Perl.

חלק ממערכות ניהול התוכן של אתרים פופולריים באינטרנט כתובות ב-Perl, לדוגמה סלאשדוט ו-Amazon.com.

== Raku (Perl 6) ==
בשנת 2001, החליט לארי וול על שכתוב נוסף של פרל: פרל 6. בניגוד לגרסאות הקודמות, הפעם לא היה מימוש יחיד, אלא רק אוסף הגדרות של השפה.

בשנים 2001-2004 חיבר וול אוסף מסמכי חזון (אפוקליפסות, באנגלית: Apocalypses). אלו היו שמונה מסמכים שתארו איך אמורה, לדעתו, להראות השפה. במקביל כתב דמיאן קוניי את פירושיו (אנגלית: Exegeses) לחזונותיו של וול. לאחר השלמתם, הוא החל לכתוב אוסף "תקצירים" (Synopses, בפועל מפרטים) של השפה.

השפה תוכננה להיות ממומשת מעל המכונה הווירטואלית Parrot. וול קיווה שעד מהרה עיקר הפיתוח של פרל יעבור לפרל 6, אולם בפועל הפיתוח של השפה התמהמה. רק לקראת 2010 החלו להופיע מימושים עובדים.

חלק מהשיפורים שנוספו בשפה נכנסו גם לגרסה 5.12 של פרל.

באוקטובר 2019 שונה שם השפה מפרל 6 ל-Raku, גם כדי להבהיר שזו שפה ממשפחת השפות של פרל, שלא תחליף פרל (כפי שתוכנן במקור) אלא תתקיים לצידה.

== מבנה ==
תוכנית בשפה דומה במידת מה לתוכנית בשפת התכנות C (לדוגמה, שימוש בסוגריים מסולסלים – <code>{ }</code>), אך עם זאת ישנם הבדלים רבים, שנוצרו בהשפעת התחביר של Unix Shell, AWK ועוד.

=== משתנים ===
ב-Perl שלושה סוגי נתונים עיקריים:

# סקלר (scalar) אשר מכיל נתון אחד שהוא מספר, מחרוזת או מצביע (reference).
# רשימה (list) שמכילה ערכים ממוספרים. נקרא גם "מערך" (array).
# מערך אסוציאטיבי (associative array) שלרוב נקרא בקיצור האש (hash) שמכיל ערכים ממופתחים לפי ערכים אחרים.

המערכים דינמיים וניתן להוסיף אליהם ולהסיר מהם איברים.

שמות המשתנים מתחילים בתו שמגדיר את הסוג שלהם, התו מכונה סיג'יל (sigil). שם משתנה סקלר מתחיל תמיד בסימן דולר (<code>$</code>), שנראה כמו האות s מהמילה scalar, למשל:

<syntaxhighlight lang="perl">
$name = "Larry";
$index = 45;
</syntaxhighlight>

שם משתנה מערך מתחיל תמיד בסימן <code>@</code> שנראה כמו האות a מהמילה array, למשל:

<syntaxhighlight lang="perl">
@beatles = ("John", "Paul", "George", "Ringo");
print $beatles[2];
</syntaxhighlight>

קטע הקוד האחרון יוצר משתנה מערך בשם <code dir="ltr">@beatles</code> המחזיק ארבע מחרוזות ומדפיס את איבר מספר 2; מכיוון שהספירה מתחילה מ-0, יודפס George. התייחסות לסקלר שהוא חלק ממערך נעשית עם סימן <code>$</code> ולא סימן <code>@</code>, מכיוון שמדובר בסקלר.
כשמדובר ברשימה כמו בדוגמה למעלה (שהתאים מכילים מילים נפרדות ללא רווחים), אפשר לשם קיצור להשתמש ב-qw שזה קיצור של quote words (מירכאות על מילים). דוגמה:

<syntaxhighlight lang="perl">
@beatles = qw( John Paul George Ringo );
print $beatles[2];
</syntaxhighlight>
יוציא את אותו פלט.

שם משתנה האש מתחיל תמיד ב-<code>%</code>, שנראה כמו זוג, למשל:

<syntaxhighlight lang="perl">
%beatles = ("Guitar" => "John",
 "Bass" => "Paul",
 "Sitar" => "George",
 "Drums" => "Ringo");
print $beatles{"Bass"};
</syntaxhighlight>

קטע הקוד האחרון יוצר משתנה האש בשם <code dir="ltr">%beatles</code> המחזיק ארבעה מפתחות (שמות של כלי נגינה) וארבעה שמות ולאחר מכן מדפיס את הערך שנמצא במפתח Bass, כלומר Paul.

ב-Perl אין מניעה שלמשתנים מסוגים שונים יהיה אותו שם, כי הם תמיד נכתבים עם הסיג'יל; כלומר באותו קטע יכול להיות סקלר בשם <code dir="ltr">$beatles</code>, מערך בשם <code dir="ltr">@beatles</code> והאש בשם <code dir="ltr">%beatles</code>. האופרטור <code dir="ltr">=></code> שווה ערך לפסיק; הוא נועד לשיפור הקריאות.

המשתנים לא חייבים להיות מוגדרים מראש והם נוצרים אוטומטית עם השמה ראשונה. עם זאת, כדי למנוע שגיאות אפשר להריץ את התוכנה במצב strict אשר מחייב הגדרת משתנים על ידי הפקודה <code dir="ltr">my</code>:

<syntaxhighlight lang="perl">
use strict;

my $number = 19;
$name = "Audrey";
</syntaxhighlight>

תוכנית זו לא תעבור הידור ולא תגיע כלל לכדי ריצה, מכיוון שהמשתנה <code dir="ltr">$name</code> לא הוגדר עם <code dir="ltr">my</code>.

ניתן גם להתייחס למצביע (reference) לכל אחד ממבנים אלו על ידי סימן <code dir="ltr">\</code>.

=== מודולים ומחלקות ===
קוד ב-Perl יכול להשתמש במודולים מוכנים מראש, אותם ניתן לטעון בזמן ריצה. כמו כן, ניתן להשתמש במחרוזות כקטעי קוד המפורשים בזמן ריצה.

החל מגרסה 5 (1994), תומכת Perl חלקית גם בתכנות מונחה עצמים, וזאת על ידי אפשרות להפוך מודול לסוג של מחלקה. אובייקט הוא מצביע (בדרך כלל מצביע למערך אסוציאטיבי) ש"בורך" (על ידי הפעולה bless) להיות שייך למחלקה. יש הורשה, אולם רק של הפעולות, ולא של תוכן האובייקט.

=== תוכניות לדוגמה ===

בקהילת פרל מפורסמת האמירה "יש יותר מדרך אחת לעשות את זה" (ידועה גם בראשי התיבות באנגלית: TIMTOWTDI – There Is More Than One Way To Do It). השפה מאפשרת סגנונות כתיבה שונים. אפשר לכתוב במסגנון דומה מאוד לזה של שפת C, אך אפשר לכתוב בדרכים שונות לחלוטין.

דוגמה לקוד שדומה לקוד בשפת C: סיכום כל אבריו החיוביים של מערך מספרים (input_arr). התחביר דומה מאוד לזה של C למעט ה-sigil שבתחילת מספר ובדיקת אורך המערך. בניגוד למומלץ קוד זה לא עושה שימוש ב-my.
<syntaxhighlight lang="perl">
$sum = 0;
for ($a=0; $a <= $#input_arr; $a++) {
 if ($input_arr[$a] > 0) {
 $sum += $input_arr[$a];
 }
}
</syntaxhighlight>

דוגמת לקוד בסגנון שונה: בהינתן מערך של כלי נגינה, נדפיס מי מאנשי להקת החיפושיות מנגן באיזה כלי (ואם לא: לא נדפיס בכלל). שימו לב לשימוש ב-$_ כמשתנה הלולאה.

<syntaxhighlight lang="perl">
# %beatles was defined in a previous example
my @instruments = ('Sitar', 'Violin', 'Bass', 'Drums', 'Flute', 'Bass', 'Guitar');
my @beatles_instruments = ();
foreach (@instruments) {
 next unless (exists $beatles{$_});
 push @beatles_instruments, $_;
}
foreach (sort @beatles_instruments) {
 print "$beatles{$_} plays $_.\n";
}
</syntaxhighlight>

== שימושים עיקריים ==

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

את היכולות שמציעה Perl כשפה ניתן להרחיב באמצעות מספר עצום של מודולים, רבים מהם זמינים בחינם באתר CPAN.

החל באמצע שנות ה-90 של המאה ה-20, ועד תחילת העשור הראשון של המאה ה-21 הייתה Perl אחת השפות הפופולריות ביותר כתוכנת צד שרת שמפעילה אתרי אינטרנט, אך בהדרגה הוחלפה על ידי שפות אחרות כמו PHP, ASP, ו-Java. בתחילת העשור השני של המאה ה-21 עדיין נעשה שימוש נרחב ב-Perl להפעלת אתרי אינטרנט, אך היא כבר אינה אחת השפות המובילות למימושים אלו.

אחד מחסרונותיה העיקריים של שפת Perl הוא הקושי בקריאת תוכנית הכתובה בה, ובפרט תחזוקתה, אם התוכנית לא תוכננה מראש לקריאות מרבית. הפוטנציאל הרב לחוסר קריאות של תוכנית Perl נובע מהפעולות הנסתרות וקיצורי הדרך הרבים הנכללים בשפה. קיצורי דרך אלו מקלים מאוד את הפיתוח המהיר של תוכנית בשפת Perl, אך מקשים על אילו שאינם שולטים ברזי השפה להבין את תפקוד התוכנית מקריאה, ובמיוחד אם בעת הכתיבה לא הושם דגש על קריאות. בשל חוסר קריאות לכאורה זה, יש המפרשים בהומור את השם Perl כראשי תיבות של "Pathologically Eclectic Rubbish Lister".

== לקריאה נוספת ==
* Larry Wall, Tom Christiansen, John Orwant – Programming Perl, O'Reilly Media, Inc., 2000. 

== קישורים חיצוניים ==

* 
* [http://www.perl.com אתר Perl של הוצאת הספרים O'Reilly] 
* [http://www.perl.org/ perl.org – האתר Perl של Perl Foundation] כולל מקורות רבים ללימוד 
* [http://www.activestate.com אתר חברת ActiveState], יוצרת ומפיצה של סביבת ריצה של Perl ל-Windows וכלי פיתוח ל-Perl 
* [http://www.perl.org.il אתר קהילת Israel.pm למשתמשי Perl בישראל], המכיל, בין השאר, מידע על קורסים ב-Perl
* [http://perl.eitan.ac.il אתר תוכן ללמידת Perl] 
* [http://www.underwar.co.il/document-details.asp?id=152 מדריך שפת Perl] באתר UnderWarrior
* [http://www.shmuelfomberg.com/perlhebtut/ "המדריך לפרל בעברית"]
* [https://web.archive.org/web/20071013080303/http://www.wall.org/~larry/ דף הבית של לארי וול, ממציא השפה]. [https://web.archive.org/web/20060615012042/http://www.wall.org/~larry/perl.html הדף שעוסק ב-Perl, בתוך דף הבית של לארי וול]. 
* 

== הערות שוליים ==

קטגוריה:שפות תכנות
קטגוריה:תוכנה חופשית
קטגוריה:ארצות הברית: המצאות