המדריך המלא לחד־שורתיים ב־Perl#
חד־שורתי של Perl הוא תוכנית שלמה הניתנת כארגומנט ל־pperl -e (או -E), המופעלת ישירות מה־shell. הוא תופס את אותה נישה כמו awk, sed, ופייפליינים אד־הוק של shell, אך עם מנוע regex עשיר יותר, ספרייה סטנדרטית מלאה, והיכולת לצמוח לסקריפט אמיתי ברגע ששורה אחת מפסיקה להספיק.
מדריך זה מיועד למשתמש shell של Linux שכבר מרכיב פייפליינים של grep/sed/awk/xargs וכתב סקריפט Perl קטן או שניים. הוא מלמד את כל ממשק שורת הפקודה מקצה לקצה: ה־switches, קטלוג מתכונים מתקדם, טרנספורמציות מבוססות regex, עבודה מספרית, כיצד לעטוף מתכונים ב־aliases של shell לשימוש חוזר, והמלכודות שעולות זמן.
הבינארי הוא pperl. כל דוגמה במדריך זה ניתנת להעתקה והדבקה ל־shell של Linux. pperl הוא מימוש מחדש ב־Rust של Perl 5; ממשק שורת הפקודה שלו תואם ל־Perl 5.42.
איזה פרק רלוונטי עבורי?#
אתם רוצים ל… | התחילו כאן |
|---|---|
לדעת מה כל switch ( | |
לעיין במתכונים החל מהחלפות טריוויאליות ועד לרדוקציות של נתונים | |
להתאים, לחלץ או לשכתב טקסט עם regexps | |
סכימה, ממוצע, יצירת ראשוניים, המרת כתובות IP, חישובי תאריכים | |
להפוך חד־שורתי לפונקציית shell או alias לשימוש חוזר | |
לאתר תקלות במרכאות, בקידוד, בעריכה במקום ובהפתעות של מפריד הרשומה |
שלוש השכבות של מדריך זה#
התמצאות - דף זה.
המתכנת העובד - ששת הפרקים שלמעלה. כל אחד עומד בפני עצמו; דפדפו באלה הרלוונטיים לבעיה הנוכחית שלכם.
מדריך עיון מעמיק - טבלת ה־switch/משתנה הקומפקטית בסוף switches.
שתי דוגמאות לפני שאתם מתחילים#
משתמש sed/awk הקורא מדריך זה רוצה לראות מה חד־שורתי נותן לו. שתי הדגמות.
סכימת המספרים בעמודה האחרונה של קובץ מופרד ברווחים#
pperl -lane '$s += $F[-1]; END { print $s }' data.txt
-l עושה chomp לתווי שורה חדשה בקלט ומוסיף אחד בפלט. -a מפצל כל שורה ל־@F. -n עוטף את התוכנית בלולאת קריאה מובלעת. $F[-1] היא העמודה האחרונה. END { … } רץ פעם אחת לאחר שהקלט מתרוקן. ללא קובץ זמני, ללא awk 'BEGIN{…}END{…}', ללא קוד שגרתי.
חילוץ כל כתובת IPv4 ייחודית מ־log, חדשות תחילה#
pperl -lne 'print for /\b(?:\d{1,3}\.){3}\d{1,3}\b/g' access.log \
| awk '!seen[$0]++'
החד־שורתי מטפל בחלק הקשה (מציאת כל ההתאמות בכל שורה, לא רק הראשונה), ה־awk שומר על ההופעה הראשונה של כל אחת. כתוב כשני כלים קצרים, כשכל אחד עושה עבודה אחת - זהו אופן העבודה של מדריך זה.
קראו בסדר זה במעבר ראשון#
switches - אוצר המילים.
progression - המתכונים, מסודרים לפי קושי.
regex-recipes, numeric - חלקים יישומיים.
aliases - הרמת מה שאתם משתמשים בו יומיומית לפונקציות shell.
gotchas - המלכודות, ברגע שאתם נתקלים בהן.
במעברים מאוחרים יותר, גשו ישירות לפרק הנושא את שם הבעיה שאתם מחזיקים.
ביבליוגרפיה#
מדריך זה אינו נגזר מספר אחד. הוא נחקר באופן שכותב טכני היה חוקר את הנושא - perldoc, תיעוד מודולי CPAN, הרצאות בכנסים, פוסטים בבלוגים, ארכיוני רשימות תפוצה, והספרים המופיעים למטה - ואז זוקק במספר מעברים: הסרת הפניות לכלים ולגרסאות שאיש לא מריץ עוד, צמצום אותה עצה שחזרה אצל מחברים שונים להצהרה אחת, ומיזוג טיפולים חלקיים מרובים בנושא אחד לטיפול שלם יחיד. התוצאה מכסה יותר שטח מכל מקור יחיד שעיינו בו, מכיוון שאף מקור יחיד אינו מכסה את כל התחום. הוא גם מקושר־הצלבה בצפיפות גבוהה יותר מכל אחד מהם: כשפרק ה־regex נוגע במשהו שמדריך ה־regex כבר מסביר בעומק, זה במרחק קליק אחד - לא פרק שאתם צריכים למצוא בעצמכם בכרך אחר.
שני הספרים למטה הם הליווי המודפס הקרוב ביותר. רכשו אותם אם הניב של חד־שורתיים הוא כלי יומיומי עבורכם ואתם רוצים מדריך עיון מודפס על המדף.
Peteris Krumins, Perl One-Liners: 130 Programs That Get Things Done, No Starch Press, 2014.
Sundeep Agarwal, Perl One-Liners Guide (learnbyexample), 2023.