מגיעים משפה אחרת#
אתם כבר יודעים לתכנת. אתם פונים אל 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’sy///becomestr///, 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
@Fandsplit,NRbecomes$., associative arrays become hashes, andBEGIN/ENDkeep their names.Shell to Perl - for when a shell script outgrew itself:
$(cmd)becomesqx{}, the[ ]/-ffile tests carry straight over, and the${var#...}parameter expansions become real regex.Tcl to Perl - a carry-over for Tcl maintainers:
set xbecomesmy $x,[expr {}]disappears into native operators, lists andarraybecome Perl arrays and hashes, andregsubbecomess///.
המושג היחיד שכדאי לקרוא ראשון#
אם תקראו רק חלק אחד מהמדריך שמתאים לרקע שלכם, קראו את הקשר. כל שפה אחרת בסדרה הזו מצמצמת אוסף למניין, לאיבר ראשון, או לערך בוליאני באמצעות תחביר מפורש (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.