משתנים מיוחדים#
Perl מגיע עם קבוצה קבועה של משתנים מובנים שמאוכלסים, נקראים, או מכובדים על ידי השפה עצמה. חלקם מחזיקים מצב מהפעולה האחרונה (משתני התאמת ה־regex, $!, $@); חלקם מגדירים כיצד מובנים מתנהגים ($/, $\, $,); חלקם חושפים את המפרש הרץ ואת סביבתו ($^V, $^O, %ENV, @INC); מעטים אינם משתנים כלל אלא הוּוים אל שירותי זמן הריצה (%SIG).
PetaPerl מממש כל משתנה מיוחד ש־Perl 5.42 מתעד, עם סמנטיקה זהה. במקום שבו זמן הריצה עושה משהו ראוי לציון משלו - מסלול JIT מהיר שקורא תא במטמון, מחרוזת COW מגובת Arc עבור $_ - זהו פרט מימוש; ההתנהגות הנראית למשתמש תואמת ל־perl5.
מדריך עיון זה מחולק לעמוד אחד לכל משפחה. משתנים החולקים הקשר (כמעט אף פעם לא קובעים $, בלי לחשוב על $\ ו־$|) נמצאים באותו עמוד; משתנים שלא (מזהי תהליכים ולכידות regex) לא.
בחרו משפחה#
משתני ברירת מחדל -
$_,@_. האופרנד המשתמע של רוב המובנים; מערך הארגומנטים של כל תת־שגרה.זהות תהליך -
$0,$$,$<,$>,$(,$). שם התוכנית, PID, ה־UIDs/GIDs האמיתיים והאפקטיביים.מצב שגיאה -
$!,$@,$?,$^E. ארבעת משתני השגיאה, כל אחד מדווח משכבה שונה (ספריית C, eval/die, תהליך ילד, מורחב־מערכת הפעלה).מצב מטפל קובץ והדפסה -
$/,$\,$,,$",$|,$.,$;. מפריד רשומת קלט, מפרידי פלט, autoflush, מונה שורות, מאחד מנויים.משתני התאמת regex -
$&,$`,$',$1..$N,%+,%-,@+,@-. תוצאת ההתאמה המוצלחת האחרונה; סיפור הביצועים שמאחורי$&וחבריו.התבוננות פנימית במפרש -
$],$^V,$^O,$^X,$^T,$^W,$^I,$^P. גרסה, מערכת הפעלה, נתיב הקובץ ההפעלה, basetime, אזהרות, עריכה במקום, דגלי מנפה שגיאות.קלט תוכנית -
@ARGV,%ENV,@INC,%INC,$0. כיצד הסקריפט מקבל את הארגומנטים שלו, את הסביבה, ואת נתיב חיפוש המודולים; סיפורuse libמולunshift @INC.טיפול באותות -
%SIG,$SIG{__WARN__},$SIG{__DIE__}. האותות שניתן לתפוס, כלל האותות הבטוחים, וצורת הכיבוי המסודר התקנית.
מרחבי שמות של משתנים#
כל משתנה מיוחד נמצא במרחב שמות אחד ספציפי. רובם ב־main::; חלקם (@F, @ISA) מקומיים לחבילה. התיעוד של כל משתנה מציין באיזה.
מוסכמת השמות היא בחירת פיסוק ו־sigil:
$<digit>- משתני לכידת regex.$<symbol>- משתנים בעלי תו יחיד ($_,$!,$@,$/, …).$^<letter>- משתני אות־בקרה ($^V,$^W,$^X). נכתבים עם caret מילולי ולאחריו אות גדולה.${^NAME}- משתני שם מורחב (${^GLOBAL_PHASE},${^CAPTURE}). הסוגריים המסולסלים וה־caret נדרשים.$NAMEלאחרuse English- הכינוי בעל השם עבור כמעט כל משתנה פיסוק.$ERRNOהוא$!,$EVAL_ERRORהוא$@, וכן הלאה.
המודול English#
use English; # all aliases, plus $PREMATCH/$MATCH/$POSTMATCH
use English qw( -no_match_vars ); # skip $`, $&, $' aliases
English מספק כינויים קריאים עבור משתני הפיסוק: $EVAL_ERROR עבור $@, $INPUT_RECORD_SEPARATOR עבור $/, וכן הלאה. הכינויים הם משתני Perl אמיתיים החולקים אחסון עם המקוריים - השמה לאחד כותבת את האחר.
הייבוא -no_match_vars מומלץ בקוד שאינו זקוק במפורש ל־$&, $`, או $'. ראו משתני התאמת regex לסיבת הביצועים ההיסטורית ומדוע היא כבר אינה משנה ב־perls מודרניים.
עמוד זה מציין צורות פיסוק לכל אורכו משום שרוב הקוד בשטח נכתב כך. הכינויים מ־English צוינים לצדם בעמודי המשפחה במקומות שבהם הם שימושיים.
לוקליזציה של משתנים מיוחדים#
כמעט כל משתנה מיוחד השולט בהתנהגות של מובנה ($/, $\, $,, $", $|, $_) הוא גלובלי - קובעים אותו במקום אחד וכל חתיכת קוד אחרת באותו תהליך רואה את השינוי. הניב התקני עבור ”אני זקוק לערך שונה רק עבור הבלוק הזה“ הוא local:
sub slurp {
my ($path) = @_;
open my $fh, '<', $path or die "open $path: $!";
local $/; # slurp mode, only inside this sub
return <$fh>;
}
ללא ה־local, ה־$/ של הקורא היה נדרס לצמיתות. local שומר את הערך הנוכחי, קובע את החדש, ומשחזר את הערך הישן כאשר התחום העוטף יוצא - אפילו בעת חריגה. הדבר חל על כל משתנה מיוחד בעמודי המשפחה, למעט אלה לקריאה בלבד (משתני התאמת regex, הארגומנט הפורמלי של $0, משתני הגרסה).
ראו גם#
perlop- כל אופרטור שקורא או כותב משתנה מיוחד כחלק מהגדרתו (איגוד regex, הדפסה, טווח, השוואה).perlfunc- פונקציות מובנות, כמעט כולן קוראות ברירת מחדל מאחד מהמשתנים הללו כשהן נקראות ללא ארגומנט (chomp,chop,print,lc,length,<>, …).-
the regex language behind the match variables.
Boolean Logic for Perl Programmers
the conceptual companion for the
||///defaulting idioms that recur throughout this reference.