מגיעים משפה אחרת#

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

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

כל מדריך בסדרה הזו מכסה את אותם נושאים באותו סדר, כך שהמיפוי בר־השוואה בין שפות והסדרה גדלה באופן נקי ככל שמתווספות שפות חדשות. הסדר נע ממה שכל שפה חולקת (משתנים, מחרוזות, מספרים) דרך הצורות המייחדות של Perl (sigils, הפיצול בין מערך ל־hash, והקשר - הרעיון היחיד שאין לאף שפה אחרת), אל המבנה (תת־שגרות, הפניות, מודולים, אובייקטים), והחוצה דרך משטח העבודה (regex, קלט/פלט, טיפול בשגיאות, ניבים), ומסתיים באוסף לכל שפה של המלכודות שבאמת נושכות.

איזה מדריך אתם רוצים#

  • מ־Python ל־Perl - sigils במקום שבו אין ל־Python כאלה, הפיצול בין מערך ל־hash במקום שבו ל־Python יש list ו־dict, comprehensions שנכתבים מחדש כ־map/grep, ומושג ההקשר שאין ל־Python מילה עבורו.

  • מ־PHP ל־Perl - כבר יש לכם $, אבל ב־Perl הוא משתנה לפי הגישה, ה־array היחיד של PHP מתפצל ל־@array ול־%hash, ו־. מול + (וגם == מול eq) חדלים להיות ניתנים להחלפה זה בזה.

  • מ־Ruby ל־Perl - בלוקים הופכים לבלוקים ו־closures של Perl, קריאות־מתודה־על־הכול הופכות לפונקציות רגילות, וה“רק nil ו־false הם שקריים“ של Ruby מתהפך אל האמיתות של Perl.

  • מ־Lua ל־Perl - טיפוס ה־table היחיד מתפצל ל־@array ול־%hash, האינדוקס הופך לבסיס־0, תבניות Lua הופכות ל־regex אמיתי, וערכי־החזרה־המרובים הם הגשר שלכם אל ההקשר של Perl.

  • Sed to Perl - the same s/// you already know, sed’s y/// becomes tr///, address ranges become the /a/ .. /b/ flip-flop, and the hold space becomes an ordinary Perl variable.

  • Awk to Perl - Perl grew out of awk, so almost everything maps directly: fields become @F and split, NR becomes $., associative arrays become hashes, and BEGIN/END keep their names.

  • Shell to Perl - for when a shell script outgrew itself: $(cmd) becomes qx{}, the [ ]/-f file tests carry straight over, and the ${var#...} parameter expansions become real regex.

  • Tcl to Perl - a carry-over for Tcl maintainers: set x becomes my $x, [expr {}] disappears into native operators, lists and array become Perl arrays and hashes, and regsub becomes s///.

המושג היחיד שכדאי לקרוא ראשון#

אם תקראו רק חלק אחד מהמדריך שמתאים לרקע שלכם, קראו את הקשר. כל שפה אחרת בסדרה הזו מצמצמת אוסף למניין, לאיבר ראשון, או לערך בוליאני באמצעות תחביר מפורש (len(x), x[0], bool(x)). Perl עושה זאת דרך הקשר: אותו ביטוי עצמו מניב רשימה במקום אחד וסקלר יחיד במקום אחר, בהתאם למקום שבו כתבתם אותו. זהו המקור לרוב הבלבול מסוג ”למה המערך שלי הפך למספר 3?“, וברגע שזה מתבהר שאר Perl נופל למקומו.

הערה על זמן הריצה#

These guides target pperl, a faithful Rust reimplementation of Perl 5.42. Every Perl example that runs as a script was executed on pperl and shows real output. The text-processing guides (sed, awk, shell) also show the classic perl -ne/perl -pe one-liner forms, which are the idiomatic Perl equivalent; the implicit-loop switches behind them are not yet recognised by this pperl build, so those one-liners are shown for reference and paired with an explicit-loop script you can run today.