אנגליתצרפתיתספרדי

סמל OnWorks

perl5200delta - מקוון בענן

הפעל את perl5200delta בספק אירוח חינמי של OnWorks על אובונטו אונליין, פדורה אונליין, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

זוהי הפקודה perl5200delta שניתן להפעיל בספק האחסון החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו בחינם כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS

תָכְנִית:

שֵׁם


perl5200delta - מה חדש עבור perl v5.20.0

תיאור


מסמך זה מתאר הבדלים בין המהדורה 5.18.0 לגרסה 5.20.0.

אם אתה משדרג מגרסה מוקדמת יותר כגון 5.16.0, קרא תחילה את perl5180delta,
המתאר הבדלים בין 5.16.0 ל-5.18.0.

ליבה שיפורים


ניסויי תת דרך חתימות
תחביר הצהרתי לפירוק רשימת ארגומנטים למשתנים מילוניים. "sub foo ($a,$b)
{...}" בודק את מספר הארגומנטים ומכניס את הארגומנטים למשתנים לקסיקליים.
חתימות אינן שוות ערך לניב הקיים של "sub foo { my($a,$b) = @_; ... }".
חתימות זמינות רק על ידי הפעלת תכונה שאינה ברירת מחדל, ויצירת אזהרות
על היותו ניסיוני. ההתנגשות התחבירית עם אבות טיפוס מנוהלת על ידי השבתת ה
תחביר אב טיפוס קצר כאשר חתימות מופעלות.

ראה "חתימות" ב-perlsub לפרטים.

"משנה". עַכשָׁיו לקחת a "אב טיפוס" תכונה
כאשר מכריזים או מגדירים "משנה", כעת ניתן לציין את אב הטיפוס בתוך a
תכונת "אב-טיפוס" במקום ב-parens אחרי השם.

לדוגמה, "sub foo($$){}" יכול להיכתב מחדש בתור "sub foo : prototype($$){}".

עוד עִקבִי אב טיפוס ניתוח
נקודות פסיק מרובות באבות טיפוס של תת-שגרה נסבלים זה מכבר והתייחסו אליו כאל
נקודה-פסיק בודדת. היה מקרה אחד שזה לא קרה. תת שגרה של מי
אב טיפוס מתחיל ב-"*" או ";*" יכול להשפיע על האם מילה חשופה נחשבת כשיטה
שם או שיחת משנה. זה חל כעת גם על ";;;*".

רווח לבן כבר מזמן מותר בתוך אבות טיפוס של תת-שגרה, אז "sub( $ $ )" הוא
שווה ערך ל-"sub($$)", אבל עד עכשיו היא הופשטה כאשר תת-השגרה נותחה.
לפיכך, רווח לבן היה לֹא מותר באבות טיפוס שנקבעו על ידי "Scalar::Util::set_prototype". עַכשָׁיו
זה מותר, והמנתח כבר לא מסיר רווחים לבנים. זה אומר "אב טיפוס
&mysub" מחזיר את אב הטיפוס המקורי, רווח לבן והכל.

"ראנד" עַכשָׁיו שימושים a עִקבִי אקראי מספר גנרטור
בעבר perl היה משתמש במחולל מספרים אקראיים ספציפי לפלטפורמה, המשתנה בין ה
libc ראנד (), אַקרַאִי() or draand48().

המשמעות היא שאיכות המספרים האקראיים של perl תשתנה מפלטפורמה לפלטפורמה,
מ-15 הביטים של ראנד () ב-Windows ל-48 סיביות בפלטפורמות POSIX כמו לינוקס עם
draand48().

Perl משתמשת כעת פנימית משלה draand48() יישום בכל הפלטפורמות. זה לא
להפוך את ה-"rand" של perl לאבטח מבחינה קריפטוגרפית. [perl #115928]

חדש פרוסה תחביר
התחביר %hash{...} ו-%array[...] החדשים מחזיר רשימה של מפתח/ערך (או אינדקס/ערך)
זוגות. ראה "פרוסות Hash מפתח/ערך" ב-perldata.

ניסויי פוסט תיקון התייחסות
כאשר תכונת "postderef" בתוקף, נקבעות השווי התחבירי הבאות
עד:

$sref->$*; # זהה ל-${ $sref } # אינטרפולציה
$aref->@*; # זהה ל-@{ $aref } # אינטרפולציה
$href->%*; # זהה ל-%{ $href }
$cref->&*; # זהה ל-&{ $cref }
$gref->**; # זהה ל-*{ $gref }

$aref->$#*; # זהה ל-$#{ $aref }

$gref->*{ $slot }; # זהה ל-*{ $gref }{ $slot }

$aref->@[ ... ]; # זהה ל-@$aref[ ... ] # אינטרפולציה
$href->@{ ... }; # זהה ל-@$href{ ... } # אינטרפולציה
$aref->%[ ... ]; # זהה ל-%$aref[ ... ]
$href->%{ ... }; # זהה ל-%$href{ ... }

אלה המסומנים כאינטרפולציה מתערבים רק אם התכונה המשויכת "postderef_qq" היא
מופעל גם. תכונה זו היא ניסיוני ויפעיל
אזהרות בקטגוריית "experimental::postderef" בעת שימוש, אלא אם כן הן מדוכאות.

למידע נוסף, עיין בקטע Postfix Dereference Syntax של perlref.

Unicode 6.3 עַכשָׁיו נתמך
Perl תומך כעת ונשלח עם Unicode 6.3 (אם כי ניתן להידור מחדש של Perl עם כל
גם מהדורה קודמת של Unicode). רשימה מפורטת של שינויים ב-Unicode 6.3 נמצאת ב-
<http://www.unicode.org/versions/Unicode6.3.0/>.

חדש "\p{Unicode}" רגיל ביטוי דפוס רכוש
זוהי מילה נרדפת ל"\p{Any}" והיא תואמת את קבוצת נקודות הקוד המוגדרות ב-Unicode 0 -
0x10FFFF.

מוטב 64 סיבית תמיכה
בפלטפורמות של 64 סיביות, פונקציות המערך הפנימי משתמשות כעת בהיסטים של 64 סיביות, מה שמאפשר Perl
מערכים שיכילו יותר מ-2**31 אלמנטים, אם יש לך את הזיכרון זמין.

מנוע הביטוי הרגולרי תומך כעת במחרוזות ארוכות מ-2**31 תווים. [פרל
#112790, #116907]

הפונקציות PerlIO_get_bufsiz, PerlIO_get_cnt, PerlIO_set_cnt ו-PerlIO_set_ptrcnt עכשיו
יש SSize_t, במקום int, להחזיר ערכים ופרמטרים.

"להשתמש מקומי" עַכשָׁיו עובד on UTF-8 מקומי
עד מהדורה זו, רק מקומות של בייט בודד, כגון סדרת ISO 8859 נתמכו.
כעת, המקומות הנפוצים יותר ויותר של UTF-8 מרובים בתים נתמכים גם הם. מקום UTF-8
הוא כזה שבו ערכת התווים היא Unicode והקידוד הוא UTF-8. ה-POSIX
פעולות בקטגוריה "LC_CTYPE" (שינוי רישיות (כמו "lc()", "\U"), ותווים
סיווג ("\w", "\D", "qr/[[:punct:]]/")) תחת מקום כזה עובד כאילו לא
תחת locale, אבל במקום זאת כאילו תחת "השתמש בתכונה 'unicode_strings'", למעט חוקים כתמים
עוקבים אחריהם. המיון נשאר לפי סדר נקודות קוד במהדורה זו. [perl #56820].

"להשתמש מקומי" עַכשָׁיו מקבץ on מערכות לְלֹא אזור יכולת
בעבר ביצוע זה גרם לתוכנית לא להדר. במסגרת התוכנית
מתנהג כאילו במקום "C". לפיכך תוכניות שנכתבו עבור פלטפורמות התומכות באזורים
יכול לפעול על פלטפורמות ללא מקומות ללא שינוי. ניסיונות לשנות את המקום
המקום "C" ייכשל, כמובן.

עוד אזור אתחול נסיגה אפשרויות
אם הייתה שגיאה במקומונים במהלך ההפעלה של Perl, היא מיד נכנעה וניסה
כדי להשתמש במקום "C". כעת הוא מנסה לראשונה להשתמש במקומות אחרים שניתנו על ידי הסביבה
משתנים, כמפורט ב"סביבה" ב-perllocale. לדוגמה, אם "LC_ALL" ו
"LANG" מוגדרים שניהם, ובשימוש המקומי "LC_ALL" נכשל, Perl תנסה כעת את "LANG"
locale, ורק אם זה ייכשל, הוא יחזור ל-"C". במחשבי Windows, Perl יעשה זאת
נסה, לפני השימוש ב-"C", אזור ברירת המחדל של המערכת אם כל האזורים ניתנים על ידי הסביבה
משתנים נכשלים.

"-DL" זמן ריצה אוֹפְּצִיָה עַכשָׁיו הוסיף ל התחקות אזור הצבה
זה מיועד למפתחי הליבה של Perl כדי לסייע באגי ניפוי באגים בשטח לגבי
מקומי

-F עַכשָׁיו מרמז -a ו -a מרמז -n
בעבר -F לְלֹא -a היה ללא אופציה, ו -a לְלֹא -n or -p היה אי-אופ, עם זה
לשנות, אם אתה מספק -F ואז שניהם -a ו -n משתמעים ואם אתה מספק -a אז -n is
מְרוּמָז.

אתה עדיין יכול להשתמש -p על ההתנהגות הנוספת שלו. [perl #116190]

$a ו $b אזהרות פטור
המשתנים המיוחדים $a ו-$b, המשמשים ב"מיין", פטורים כעת מאזהרות "השתמשו פעם אחת",
גם כאשר "מיון" אינו משמש. זה מקל על מודולי CPAN לספק פונקציות
שימוש ב-$a ו-$b למטרות דומות. [perl #120462]

אבטחה


להמנע אפשרי לקרוא of חינם()d זיכרון בְּמַהֲלָך ניתוח
זה היה אפשרי חינם()ניתן לקרוא את זיכרון d במהלך הניתוח בחריג
נסיבות של תוכנית Perl מסתיימת עם heredoc והשורה האחרונה של הקובץ על
לדיסק אין תו קו חדש מסתיים. זה תוקן כעת.

שאינו עולה בקנה אחד שינויים


"לַעֲשׂוֹת" יכול לא עוד be מְשׁוּמָשׁ ל שיחה שגרות
הטופס "do SUBROUTINE(LIST)" הביא אזהרת הוצאה משימוש מאז Perl v5.0.0,
והוא כעת שגיאת תחביר.

דמוי ציטוט לברוח שינויים
התו אחרי "\c" במחרוזת במירכאות כפולות ("..." או qq(...)) או רגילה
הביטוי חייב להיות תו הניתן להדפסה ואינו יכול להיות "{".

"{" מילולי אחרי "\B" או "\b" הוא כעת קטלני.

אלה הוצאו משימוש ב-perl v5.14.0.

הכתמה קורה תחת יותר נסיבות; עַכשָׁיו תואם ל תיעוד
זה משפיע על התאמת ביטוי רגולרי ושינוי האותיות של מחרוזת ("lc", "\U",
וכו '.) בטווח של "שימוש מקומי". התוצאה נגועה כעת על סמך הניתוח,
לא משנה מה היה תוכן המחרוזת, בתור התיעוד (perlsec, "SECURITY"
ב-perllocale) מציין שצריך. בעבר, עבור מבצע שינוי מקרה, אם
המחרוזת לא הכילה תווים ששינוי האותיות שלהם יכול להיות מושפע מהמקום, ה-
התוצאה לא תהיה נגועה. לדוגמה, התוצאה של "uc()" על מחרוזת ריקה או אחת
המכיל רק נקודות קוד מעל לטיני1 נגוע כעת, ולא היה בעבר. זה מוביל ל
תוצאות כתמים עקביות יותר. דפוסי ביטוי רגולרי מכתימים את הלא-בינאריים שלהם
תוצאות (כמו $&, $2) אם ורק אם הדפוס מכיל אלמנטים שההתאמה שלהם תלויה
על המקום הנוכחי (היכול להיות נגוע). כמו הפונקציות המשתנות במקרה, בפועל
התוכן של המחרוזת המתואמת כעת אינו משנה, ואילו בעבר כן. ל
לדוגמה, אם התבנית מכילה "\w", התוצאות יהיו מוכתמות גם אם ההתאמה הייתה
לא צריך להשתמש בחלק הזה של הדפוס כדי להצליח או להיכשל, כי איזה "\w"
התאמות תלויות במקום. עם זאת, למשל, "." בתבנית לא יאפשר
tainting, כי הנקודה מתאימה לכל תו בודד, ומה המקום הנוכחי
לא משנה בשום אופן מה מתאים ומה לא.

"\p{}", "\P{}" תואם יש ל השתנה ל שאינו יוניקוד קוד נקודות.
"\p{}" ו-"\P{}" מוגדרות על ידי Unicode רק בנקודות קוד המוגדרות ב-Unicode ("U+0000"
דרך "U+10FFFF"). ההתנהגות שלהם בהתאמת נקודות הקוד החוקיות של Unicode היא
ללא שינוי, אך ישנם שינויים עבור נקודות קוד 0x110000 ומעלה. בעבר, פרל
התייחס לתוצאה של התאמת "\p{}" ו-"\P{}" מול אלה כ"undef", אשר
מתורגם ל"שקר". עבור "\P{}", זה הושלם לאחר מכן ל-"true". אזהרה
היה אמור לעלות כשזה קרה. עם זאת, אופטימיזציות שונות יכולות
למנוע את האזהרה, והתוצאות היו לעתים קרובות נגד אינטואיציה, עם התאמה וגם
ההשלמה שלו לכאורה כוזבת. כעת כל נקודות הקוד שאינן Unicode מטופלות כאל
נקודות קוד טיפוסיות שלא מוקצות. זה בדרך כלל יותר עשה-מה-אני-מתכוון. אזהרה
מועלה רק אם התוצאות שונות ללא ספק מגישת Unicode קפדנית, ו
ממה שפרל נהגה לעשות. קוד שצריך להיות תואם Unicode בהחלט יכול לעשות זאת
אזהרה קטלנית, ואז פרל תמיד מעלה את האזהרה.

הפרטים נמצאים ב"מעבר לנקודות קוד Unicode" ב-perlunicode.

"\לְעַיֵף}" יש ל היה מורחב ל להתאים את כל אפשרי קוד נקודות
רכיב דפוס הביטוי הרגולרי המוגדר ב-Perl "\p{All}", שאינו בשימוש ב-CPAN, רגיל
התאימו רק לנקודות הקוד של Unicode; כעת הוא תואם את כל נקודות הקוד האפשריות; זהו זה
שווה ל-"qr/./s". לפיכך "\p{הכל}" כבר לא שם נרדף ל-"\p{כל}", אשר
ממשיך להתאים רק לנקודות הקוד של Unicode, כפי ש-Unicode אומר שצריך.

נתונים::Dumper's תפוקה אולי שינוי
בהתאם למבני הנתונים שנזרקו וההגדרות שהוגדרו עבור Data::Dumper, the dumped
ייתכן שהפלט השתנה מגרסאות קודמות.

אם יש לך מבחנים שתלויים בפלט המדויק של Data::Dumper, הם עלולים להיכשל.

כדי למנוע בעיה זו בקוד שלך, בדוק מול מבנה הנתונים מתוך הערכת ה
מבנה שהושלך, במקום המזבלה עצמה.

אזור עֶשׂרוֹנִי נקודה אופי לא עוד הדלפות בחוץ of "להשתמש מקומי" היקף
זהו למעשה תיקון באג, אבל קוד מסוים הסתמך על קיים הבאג, אז
השינוי הזה מופיע כאן. המקום הנוכחי שתחתיו התוכנית פועלת אינו
אמור להיות גלוי לקוד Perl למעט בטווח של "שימוש מקומי". למרות זאת,
עד כה, בנסיבות מסוימות, התו המשמש לנקודה עשרונית (לעיתים קרובות א
פסיק) דלף מחוץ לתחום. אם הקוד שלך מושפע מהשינוי הזה, פשוט הוסף א
"השתמש במקום".

משימות of Windows ארובות שגיאה קודים ל $! עַכשָׁיו לְהַעֲדִיף errno.h ערכים יותר
WSAGetLastError () ערכים
בגירסאות קודמות של Perl, Windows שקע קודי שגיאה כפי שהוחזרו על ידי WSAGetLastError ()
הוקצו ל-$!, וכמה קבועים כגון ECONNABORTED, לא ב errno.h ב-VC++ (או
יציאות Windows השונות של gcc) הוגדרו לערכי WSAE* המתאימים כדי לאפשר $!
להיבדק מול קבועי E* המיוצאים על ידי Errno ו-POSIX.

זה עבד היטב עד VC++ 2010 ואילך, שהציג קבועי E* חדשים עם ערכים
> 100 לתוך errno.h, כולל כמה מוגדרים (מחדש) על ידי perl לערכי WSAE*. זה גרם
בעיות בעת קישור קוד XS לספריות אחרות שהשתמשו בהגדרות המקוריות
of errno.h קבועים.

כדי להימנע מאי התאמה זו, perl ממפה כעת קודי שגיאה של WSAE* לערכי E* היכן
אפשרי, ומקצה את הערכים האלה ל-$!. הקבועים E* המיוצאים על ידי Errno ו-POSIX
מעודכנים כך שיתאימו כך שבדיקת $! נגדם, בכל מקום שהיה אפשרי קודם לכן, יעשה
המשך לעבוד כצפוי, וכל הקבועים E* נמצאים ב errno.h מיוצאים כעת מ
המודולים האלה עם המקור שלהם errno.h ערכים.

על מנת למנוע שבירה בקוד Perl קיים אשר מקצה ערכי WSAE* ל-$!, perl
כעת מיירט את ההקצאה ומבצע את אותו מיפוי לערכי E* כפי שהוא משתמש בו
באופן פנימי בעת הקצאה ל-$! עצמו.

עם זאת, נותרה אי התאמה אחת לאחור: קוד Perl קיים שמשווה $!
מול הערכים המספריים של קודי השגיאה WSAE* שהוקצו בעבר ל-$!
יישבר כעת באותם מקרים שבהם הוקצה ערך E* תואם
במקום זאת. זו בעיה רק ​​עבור ערכי E* < 100, שתמיד יוצאו מהם
Errno ו-POSIX עם המקור שלהם errno.h ערכים, ולכן לא ניתן היה להשתמש בהם
בדיקות קוד שגיאה של WSAE* (לדוגמה, WSAEINVAL הוא 10022, אך ה-EINVAL התואם הוא 22). (ה*
ערכים > 100, אם קיימים, הוגדרו מחדש לערכי WSAE* בכל מקרה, כך שתאימות יכולה להיות
מושגת על ידי שימוש בקבועי E*, שיפעלו גם לפני וגם אחרי שינוי זה,
אם כי משתמשים בערכים מספריים שונים מתחת למכסה המנוע.)

פונקציות "PerlIO_vsprintf" ו "PerlIO_sprintf" יש היה הוסר
שתי הפונקציות הללו, לא מתועדות, שאינן בשימוש ב-CPAN ובעייתיות, הוסרו.

דחיקות


השמיים "/\C/" אופי בכיתה
מחלקת התווים "/\C/" הוצאה משימוש. מ-perl 5.22 ואילך זה
יפיק אזהרה, ומ-perl 5.24 ואילך זה יהיה ביטוי רגולרי
שגיאת מהדר. אם אתה צריך לבחון את הבתים הבודדים המרכיבים UTF8 מקודד
תו, ולאחר מכן השתמש תחילה ב-"utf8::encode()" במחרוזת (או עותק).

מילולית לִשְׁלוֹט תווים in משתנה שמות
הוצאה זו משפיעה על דברים כמו $\cT, כאשר \cT הוא פקד מילולי (כגון "NAK"
או תו "אישור שלילי") בקוד המקור. באופן מפתיע, נראה שכן
במקור זה נועד כדרך הקנונית לגשת למשתנים כמו $^T, עם
טופס הקארט מתווסף רק כחלופה.

צורת הבקרה המילולית מבוטלת משתי סיבות עיקריות. יש לזה מה שסביר
באגים בלתי ניתנים לתיקון, כגון $\cI לא פועלים ככינוי עבור $^I, והשימוש בהם אינו
נייד לפלטפורמות שאינן ASCII: בעוד ש$^T יעבוד בכל מקום, \cT נמצא בתוכו רווח לבן
EBCDIC. [perl #119123]

הפניות ל ללא מספרים שלמים ו לא חיובי מספרים שלמים in $/
הגדרת $/ להפניה לאפס או הפניה למספר שלם שלילי הוצאה משימוש,
ויתנהג בדיוק כאילו הוא מוגדר ל-"undef". אם אתה רוצה להגדיר התנהגות של slurp
$/ ל-"undef" במפורש.

הגדרת $/ להפניה למספר שאינו שלם אסורה כעת ותגרום לשגיאה. פרל
מעולם לא תיעד מה יקרה בהקשר הזה ובזמן שהוא נהג להתנהג
זהה להגדרת $/ לכתובת ההפניות בעתיד, זה עשוי להתנהג אחרת,
אז אסרו את השימוש הזה.

אופי תואם שגרות in POSIX
השימוש בכל אחת מהפונקציות הללו במודול "POSIX" הוצא כעת משימוש: "isalnum",
"isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace",
"isupper", ו-"isxdigit". הפונקציות הן באגי ואינן עובדות בקידוד UTF-8
מחרוזות. ראה את הערכים שלהם ב-POSIX למידע נוסף.

אזהרה מועלית בקריאה הראשונה לכל אחד מהם מכל מקום בקוד שהם
נקראים. (לכן אמירה חוזרת ונשנית בלולאה תעלה רק את האזהרה האחת).

מבוסס מתורגמן אשכולות יש לו עַכשָׁיו מיואש
"החוטים המבוססים על מתורגמנים" שמספקת Perl אינם המערכת המהירה וקלת המשקל עבורם
ריבוי משימות שאפשר לצפות או לקוות לה. חוטים מיושמים בצורה כזו
לעשות בהם שימוש לרעה בקלות. מעטים האנשים שיודעים להשתמש בהם נכון או יוכלו לעשות זאת
לספק עזרה.

השימוש בשרשורים מבוססי מתורגמן ב-perl אינו מעודד רשמית.

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

גרסאות הליבה של מודולים אלה יוציאו כעת אזהרות מקטגוריות "מבוטלות" כדי להתריע
אותך לעובדה הזו. כדי להשתיק את אזהרות ההוצאה משימוש, התקן את המודולים המדוברים
מ- CPAN.

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

CGI וה-CGI:: המשויך לו חבילות
inc::האחרונה
חבילה:: קבועים
Module::Build והחבילות הקשורות אליו Module::Build::

שירות הסרות
כלי השירות הבאים יוסרו מהפצת הליבה במהדורה עתידית,
ובאותו זמן יהיה צורך להתקין מ-CPAN.

find2perl
s2p
a2p

ביצוע שיפורים


· לפרל מנגנון העתקה על כתיבה חדש המונע את הצורך להעתיק את הפנימי
חוצץ מחרוזת בעת הקצאה מסקלר אחד לאחר. זה הופך את ההעתקה לגדולה
מחרוזות מופיעות הרבה יותר מהר. שינוי אחת משתי המחרוזות (או יותר) לאחר an
המשימה תכפה עותק פנימית. זה הופך את זה למיותר להעביר מחרוזות
התייחסות ליעילות.

תכונה זו כבר הייתה זמינה ב-5.18.0, אך לא הופעלה כברירת מחדל. זה
ברירת המחדל כעת, ולכן אינך צריך עוד לבנות perl עם ה- גדר טענה:

-Accflags=-DPERL_NEW_COPY_ON_WRITE

זה יכול להיות מושבת (בינתיים) ב-perl build עם:

-Accflags=-DPERL_NO_COW

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

· לפרל יש אופטימיזציה לדפוסי ביטוי רגולרי. זה מנתח את הדפוס ל
מצא דברים כמו האורך המינימלי שהמחרוזת צריכה להיות כדי להתאים וכו'. זה עכשיו
מטפל טוב יותר בנקודות קוד שנמצאות מעל לטווח Latin1.

· ביצוע ביטוי רגולרי המכיל את העוגן "^" (או הגרסה שלו תחת הדגל "/m")
נעשה הרבה יותר מהיר במספר מצבים.

· ערכי hash מחושבים מראש משמשים כעת במקומות נוספים במהלך חיפוש השיטה.

· חיפושי מפתחות hash קבועים ($hash{key} בניגוד ל$hash{$key}) היו מזמן
ערך גיבוב פנימי מחושב בזמן ההידור, כדי להאיץ את הבדיקה. האופטימיזציה הזו
הוחל רק כעת גם על פרוסות חשיש.

· אופרטורים "ו" ו"או" משולבים בהקשר ריק, כמו אלו שנוצרו עבור "אלא אם כן
($a && $b)" ו-"if ($a || b)" מקצרים כעת ישירות לסוף ההצהרה.
[perl #120128]

· במצבים מסוימים, כאשר "החזרה" היא ההצהרה האחרונה בשגרת המשנה הראשית
היקף, הוא יעבור אופטימיזציה החוצה. זה אומר קוד כמו:

sub baz { return $cat; }

עכשיו יתנהג כמו:

sub baz { $cat; }

שהוא מהיר יותר במיוחד.

[perl #120765]

· קוד כמו:

$x שלי; # או @x, %x
שלי $y;

כעת מותאם ל:

שלי ($x, $y);

בשילוב עם אופטימיזציית ה-padrange שהוצגה ב-v5.18.0, המשמעות היא זמן רב יותר
לא אתחול גם הצהרות המשתנים שלי עוברות אופטימיזציה, אז:

$x שלי; שלי @y; שלי %z;

הופך:

שלי ($x, @y, %z);

[perl #121077]

· היצירה של סוגים מסוימים של רשימות, כולל פרוסות מערך ו-hash, היא כעת
מהיר יותר.

· האופטימיזציה עבור מערכים שצורפו לאינדקס עם מספר שלם קבוע קטן מוחל כעת
מספרים שלמים בטווח -128..127, במקום 0..255. זה אמור להאיץ את קוד Perl
שימוש בביטויים כמו $x[-1], על חשבון (כנראה הרבה יותר נדיר) שימוש בקוד
ביטויים כמו $x[200].

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

· בעת ביצוע התאמה גלובלית של ביטוי רגולרי על מחרוזת שהגיעה מה-"readline" או "<>"
מפעיל, הנתונים אינם מועתקים עוד שלא לצורך. [perl #121259]

· ההפניה (כמו ב-"$obj->[0]" או "$obj->{k}") מהירה יותר כעת כאשר $obj הוא
מופע של מחלקה שהעמיס על שיטות, אבל לא מעמיס על אף אחת מה-
שיטות ייחוס "@{}", "%{}", וכן הלאה.

· כלי האופטימיזציה של פרל כבר לא מדלג על קוד אופטימיזציה שעוקב אחר "השוואה {}" מסוימת
ביטויים (כולל אלה עם לולאה אינסופית לכאורה).

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

· Perl עושה כעת פחות קלט/פלט דיסק כאשר עוסקים במאפייני Unicode שמכסים עד
שלושה טווחים של נקודות קוד עוקבות.

מודולים ו פרגמטה


חדש מודולים ו פרגמטה
· 0.007 ניסיוני נוסף לליבה של Perl.

· IO::Socket::IP 0.29 נוסף לליבה של Perl.

מְעוּדכָּן מודולים ו פרגמטה
· Archive::Tar שודרג מגרסה 1.90 ל-1.96.

· arybase שודרג מגרסה 0.06 ל-0.07.

· Attribute::Handlers שודרג מגרסה 0.94 ל-0.96.

· תכונות שודרגו מגרסה 0.21 ל-0.22.

· autodie שודרג מגרסה 2.13 ל-2.23.

· AutoLoader שודרג מגרסה 5.73 ל-5.74.

· שימוש אוטומטי שודרג מגרסה 1.07 ל-1.08.

· B שודרג מגרסה 1.42 ל-1.48.

· B::Concise שודרג מגרסה 0.95 ל-0.992.

· B::Debug שודרג מגרסה 1.18 ל-1.19.

· B::Deparse שודרג מגרסה 1.20 ל-1.26.

· הבסיס שודרג מגרסה 2.18 ל-2.22.

· Benchmark שודרג מגרסה 1.15 ל-1.18.

· bignum שודרגה מגרסה 0.33 ל-0.37.

· Carp שודרג מגרסה 1.29 ל-1.3301.

· CGI שודרג מגרסה 3.63 ל-3.65. הערה: CGI הוצא משימוש ויכול להיות
הוסר מגרסה עתידית של Perl.

· charnames שודרג מגרסה 1.36 ל-1.40.

· Class::Struct שודרג מגרסה 0.64 ל-0.65.

· Compress::Raw::Bzip2 שודרג מגרסה 2.060 ל-2.064.

· Compress::Raw::Zlib שודרג מגרסה 2.060 ל-2.065.

· Config::Perl::V שודרג מגרסה 0.17 ל-0.20.

· קבוע שודרג מגרסה 1.27 ל-1.31.

· CPAN שודרג מגרסה 2.00 ל-2.05.

· CPAN::Meta שודרגה מגרסה 2.120921 ל-2.140640.

· CPAN::Meta::Requirements שודרג מגרסה 2.122 ל-2.125.

· CPAN::Meta::YAML שודרג מגרסה 0.008 ל-0.012.

· נתונים::Dumper שודרג מגרסה 2.145 ל-2.151.

· DB שודרג מגרסה 1.04 ל-1.07.

· DB_File שודרג מגרסה 1.827 ל-1.831.

· DBM_Filter שודרג מגרסה 0.05 ל-0.06.

· הוצא משימוש שודרג מגרסה 0.02 ל-0.03.

· Devel::Peek שודרג מגרסה 1.11 ל-1.16.

· Devel::PPPort שודרג מגרסה 3.20 ל-3.21.

· האבחון שודרג מגרסה 1.31 ל-1.34.

· Digest::MD5 שודרג מגרסה 2.52 ל-2.53.

· Digest::SHA שודרג מגרסה 5.84 ל-5.88.

· DynaLoader שודרג מגרסה 1.18 ל-1.25.

· Encode שודרג מגרסה 2.49 ל-2.60.

· הקידוד שודרג מגרסה 2.6_01 ל-2.12.

· האנגלית שודרגה מגרסה 1.06 ל-1.09.

$OLD_PERL_VERSION נוסף ככינוי של $].

· Errno שודרג מגרסה 1.18 ל-1.20_03.

· היצואן שודרג מגרסה 5.68 ל-5.70.

· ExtUtils::CBuilder שודרג מגרסה 0.280210 ל-0.280216.

· ExtUtils::Command שודרגה מגרסה 1.17 ל-1.18.

· ExtUtils::Embed שודרג מגרסה 1.30 ל-1.32.

· ExtUtils::Install שודרגה מגרסה 1.59 ל-1.67.

· ExtUtils::MakeMaker שודרג מגרסה 6.66 ל-6.98.

· ExtUtils::Miniperl שודרג מגרסה ל-1.01.

· ExtUtils::ParseXS שודרג מגרסה 3.18 ל-3.24.

· ExtUtils::Typemaps שודרג מגרסה 3.19 ל-3.24.

· ExtUtils::XSSymSet שודרג מגרסה 1.2 ל-1.3.

· התכונה שודרגה מגרסה 1.32 ל-1.36.

· שדות שודרג מגרסה 2.16 ל-2.17.

· File::Basename שודרג מגרסה 2.84 ל-2.85.

· File::Copy שודרג מגרסה 2.26 ל-2.29.

· קובץ::DosGlob שודרג מגרסה 1.10 ל-1.12.

· File::Fetch שודרג מגרסה 0.38 ל-0.48.

· File::Find שודרג מגרסה 1.23 ל-1.27.

· File::Glob שודרג מגרסה 1.20 ל-1.23.

· File::Spec שודרג מגרסה 3.40 ל-3.47.

· File::Temp שודרג מגרסה 0.23 ל-0.2304.

· FileCache שודרג מגרסה 1.08 ל-1.09.

· מסנן::Simple שודרג מגרסה 0.89 ל-0.91.

· Filter::Util::Call שודרג מגרסה 1.45 ל-1.49.

· Getopt::Long שודרג מגרסה 2.39 ל-2.42.

· Getopt::Std שודרג מגרסה 1.07 ל-1.10.

· Hash::Util::FieldHash שודרג מגרסה 1.10 ל-1.15.

· HTTP::Tiny שודרג מגרסה 0.025 ל-0.043.

· I18N::Langinfo שודרג מגרסה 0.10 ל-0.11.

· I18N::LangTags שודרג מגרסה 0.39 ל-0.40.

· אם שודרג מגרסה 0.0602 ל-0.0603.

· inc::latest שודרג מגרסה 0.4003 ל-0.4205. הערה: inc::האחרון הוא
הוצא משימוש ועשוי להיות מוסר מגרסה עתידית של Perl.

· מספר שלם שודרג מגרסה 1.00 ל-1.01.

· IO שודרג מגרסה 1.28 ל-1.31.

· IO::Compress::Gzip וחברים שודרגו מגרסה 2.060 ל-2.064.

· IPC::Cmd שודרג מגרסה 0.80 ל-0.92.

· IPC::Open3 שודרג מגרסה 1.13 ל-1.16.

· IPC::SysV שודרג מגרסה 2.03 ל-2.04.

· JSON::PP שודרג מגרסה 2.27202 ל-2.27203.

· רשימה::Util שודרג מגרסה 1.27 ל-1.38.

· המקום שודרג מגרסה 1.02 ל-1.03.

· Locale::Codes שודרג מגרסה 3.25 ל-3.30.

· Locale::Maketext שודרג מגרסה 1.23 ל-1.25.

· Math::BigInt שודרג מגרסה 1.9991 ל-1.9993.

· Math::BigInt::FastCalc שודרג מגרסה 0.30 ל-0.31.

· Math::BigRat שודרג מגרסה 0.2604 ל-0.2606.

· MIME::Base64 שודרג מגרסה 3.13 ל-3.14.

· Module::Build שודרג מגרסה 0.4003 ל-0.4205. הערה: מודול::Build הוא
הוצא משימוש ועשוי להיות מוסר מגרסה עתידית של Perl.

· Module::CoreList שודרג מגרסה 2.89 ל-3.10.

· Module::Load שודרג מגרסה 0.24 ל-0.32.

· Module::Load::Conditional שודרג מגרסה 0.54 ל-0.62.

· Module::Metadata שודרג מגרסה 1.000011 ל-1.000019.

· mro שודרג מגרסה 1.11 ל-1.16.

· Net::Ping שודרג מגרסה 2.41 ל-2.43.

· Opcode שודרג מגרסה 1.25 ל-1.27.

· חבילה::Constants שודרגה מגרסה 0.02 ל-0.04. הערה:
Package::Constants הוצא משימוש וייתכן שיוסרו מגרסה עתידית של Perl.

· פרמטרים::Check שודרג מגרסה 0.36 ל-0.38.

· האב שודרג מגרסה 0.225 ל-0.228.

· ניתוח::CPAN::Meta שודרג מגרסה 1.4404 ל-1.4414.

· Perl::OSType שודרג מגרסה 1.003 ל-1.007.

· perlfaq שודרג מגרסה 5.0150042 ל-5.0150044.

· PerlIO שודרגה מגרסה 1.07 ל-1.09.

· קידוד PerlIO:: שודרג מגרסה 0.16 ל-0.18.

· PerlIO::scalar שודרג מגרסה 0.16 ל-0.18.

· PerlIO::via שודרגה מגרסה 0.12 ל-0.14.

· Pod::Escapes שודרג מגרסה 1.04 ל-1.06.

· Pod::Functions שודרג מגרסה 1.06 ל-1.08.

· Pod::Html שודרג מגרסה 1.18 ל-1.21.

· Pod::Parser שודרג מגרסה 1.60 ל-1.62.

· Pod::Perldoc שודרג מגרסה 3.19 ל-3.23.

· Pod::השימוש שודרג מגרסה 1.61 ל-1.63.

· POSIX שודרג מגרסה 1.32 ל-1.38_03.

· re שודרגה מגרסה 0.23 ל-0.26.

· Safe שודרגה מגרסה 2.35 ל-2.37.

· Scalar::Util שודרג מגרסה 1.27 ל-1.38.

· SDBM_File שודרג מגרסה 1.09 ל-1.11.

· Socket שודרג מגרסה 2.009 ל-2.013.

· Storable שודרג מגרסה 2.41 ל-2.49.

· strict שודרג מגרסה 1.07 ל-1.08.

· subs שודרגו מגרסה 1.01 ל-1.02.

· Sys::שם מארח שודרג מגרסה 1.17 ל-1.18.

· Sys::Syslog שודרג מגרסה 0.32 ל-0.33.

· Term::Cap שודרג מגרסה 1.13 ל-1.15.

· Term::ReadLine שודרג מגרסה 1.12 ל-1.14.

· Test::Harness שודרג מגרסה 3.26 ל-3.30.

· Test::Simple שודרג מגרסה 0.98 ל-1.001002.

· טקסט::ParseWords שודרג מגרסה 3.28 ל-3.29.

· Text::Tabs שודרג מגרסה 2012.0818 ל-2013.0523.

· Text::Wrap שודרג מגרסה 2012.0818 ל-2013.0523.

· השרשור שודרג מגרסה 3.02 ל-3.04.

· שרשור::תור שודרג מגרסה 3.02 ל-3.05.

· שרשורים שודרגו מגרסה 1.86 ל-1.93.

· threads::shared שודרג מגרסה 1.43 ל-1.46.

· Tie::Array שודרג מגרסה 1.05 ל-1.06.

· Tie::הקובץ שודרג מגרסה 0.99 ל-1.00.

· Tie::Hash שודרג מגרסה 1.04 ל-1.05.

· Tie::Scalar שודרג מגרסה 1.02 ל-1.03.

· Tie::StdHandle שודרג מגרסה 4.3 ל-4.4.

· Time::HiRes שודרג מגרסה 1.9725 ל-1.9726.

· זמן::Piece שודרג מגרסה 1.20_01 ל-1.27.

· Unicode::Collate שודרג מגרסה 0.97 ל-1.04.

· Unicode::Normalize שודרג מגרסה 1.16 ל-1.17.

· Unicode::UCD שודרג מגרסה 0.51 ל-0.57.

· utf8 שודרג מגרסה 1.10 ל-1.13.

· הגרסה שודרגה מגרסה 0.9902 ל-0.9908.

· vmsish שודרג מגרסה 1.03 ל-1.04.

· אזהרות שודרגו מגרסה 1.18 ל-1.23.

· Win32 שודרג מגרסה 0.47 ל-0.49.

· XS::Typemap שודרגה מגרסה 0.10 ל-0.13.

· XSLoader שודרג מגרסה 0.16 ל-0.17.

תיעוד


חדש תיעוד
מאגר פרל

מסמך זה הוסר (למעשה, שונה שם ל-perlgit ועבר שיפוץ משמעותי) ב-Perl
v5.14, מה שגורם לאתרי תיעוד של Perl להציג את הגרסה המיושנת כעת ב-Perl
v5.12 כגרסה העדכנית ביותר. כעת הוא שוחזר בצורת בדל, ומפנה את הקוראים אל
מידע עדכני.

שינויים ל קיים תיעוד
perldata

· נוספו קטעים חדשים כדי לתעד את פרוסת מערך האינדקס/ערך והמפתח/ערך החדשים
תחביר פרוסת hash.

perldebguts

· תת שגרות הבאגים של "DB::goto" ו-"DB::lsub" מתועדות כעת. [perl #77680]

ניסוי פרפלקס

· "\s" התואם "\cK" מסומן כניסיוני.

· threads התקבלו ב-v5.8.0 (אך אינם מעודדים החל מ-v5.20.0).

· כפילים ארוכים אינם נחשבים ניסיוניים.

· קוד בביטויים רגולריים, פעלים חוזרים לביטוי רגולרי ו-lvalue
תתי שגרות כבר לא מופיעות כניסוי. (זה משפיע גם על perlre ו
perlsub.)

perlfunc

· "צ'ופ" ו-"chomp" עכשיו שימו לב שהם יכולים לאפס את איטרטור ה-hash.

· הטיפול של "exec" בטיעונים מתועד כעת בצורה ברורה יותר.

· ל-"eval EXPR" יש כעת אזהרות לגבי הרחבת מספרי הנקודה הצפה באזורים מסוימים.

· "גוטו EXPR" מתועד כעת לטיפול בביטוי שמעריך קוד
התייחסות כאילו זה היה "goto &$coderef". התנהגות זו היא בת עשר שנים לפחות.

· מאז Perl v5.10, אפשר לתתי שגרות ב-@INC להחזיר הפניה
לסקלרי שמכיל קוד מקור ראשוני כדי להצמיד לקובץ. זה עכשיו
מְתוֹעָד.

· התיעוד של "ref" עודכן כדי להמליץ ​​על השימוש ב"מבורך", "איסא"
ו-"reftype" כאשר עוסקים בהתייחסויות לחפצים מבורכים.

עצלות

· בוצעו שינויים קלים רבים כדי לשקף שינויים שבוצעו ב-perl internals ב
השחרור הזה.

· נוספו קטעים חדשים בנושא ערכי קריאה בלבד והעתק בכתיבה.

פרלהאק

· סעיף מדריך התיקון הסופר מהיר עודכן.

perlhacktips

· התיעוד עודכן כך שיכלול עוד כמה דוגמאות לשימוש ב-"gdb".

perlexwarn

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

perllocale

· התיעוד מזכיר כעת fc() ו-"\F", וכולל הבהרות רבות ו
תיקונים באופן כללי.

פרלופ

· עיצוב השפה של פרל תמיד קרא לאופרטורים מונומורפיים. זה עכשיו
שהוזכר במפורש.

perlopentut

· המדריך "פתוח" שוכתב לחלוטין על ידי טום כריסטיאנסן, וכעת מתמקד
על כיסוי היסודות בלבד, במקום לספק התייחסות מקיפה לכל
דברים ניתנים לפתיחה. שכתוב זה הגיע כתוצאה מדיון נמרץ בנושא
perl5-porters נפתחה על ידי סט שיפורים שכתב אלכסנדר הרטמאייר ל
הפרלופטוט הקיים. מסמך "יותר ממה שאי פעם רצית לדעת על "פתוח"".
עשוי לעקוב בגרסאות הבאות של perl.

פרלר

· העובדה שמנוע הביטוי הרגולרי אינו מתאמץ לקרוא ל-(?{}) ו-(??{}) בונים
כל מספר מוגדר של פעמים (אם כי זה בעצם יעשה DWIM במקרה של הצלחה
התאמה) תועד.

· המשנה "/r" (להחלפה לא הרסנית) מתועד כעת. [perl #119151]

· התיעוד עבור "/x" ו-"(?# תגובה)" הורחב והובהר.

perlreguts

· התיעוד עודכן לאור השינויים האחרונים ב regcomp.c.

פרלסוב

· הצורך להצהיר מראש על פונקציות רקורסיביות עם אבות טיפוס על מנת לקבל אב טיפוס
לכבד את השיחה הרקורסיבית מתועד כעת. [perl #2726]

· רשימה של שמות תתי שגרה המשמשים את יישום perl כלולה כעת. [פרל
#77680]

perltrap

· יש כעת קטע JavaScript.

perlunicode

· התיעוד עודכן כך שישקף את השינויים "Bidi_Class" ב-Unicode 6.3.

perlvar

· סעיף חדש המסביר את בעיות הביצועים של $`, $& ו-$', כולל
נוספו דרכים לעקיפת הבעיה ושינויים בגרסאות שונות של Perl.

· שלושה שמות משתנים באנגלית שתועדו מזמן אך אינם קיימים בפועל
הוסרו מהתיעוד. אלה היו $OLD_PERL_VERSION, $OFMT ו
$ARRAY_BASE.

(למעשה, "OLD_PERL_VERSION" עושה קיימים, החל מהגרסה הזו, אך נשארו
לא מתועד עד perl 5.22.0.)

perlxs

· מספר בעיות בדוגמה "MY_CXT" תוקנו.

אבחון


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

חדש אבחון
חדש שגיאות

· ארגומנט המחיקה הוא פרוסת מערך אינדקס/ערך, השתמש בפרוסת מערך

(ו) השתמשת בתחביר פרוסות מערך אינדקס/ערך (%array[...]) כארגומנט ל"מחיקה".
כנראה התכוונת ל-@array[...] עם סמל @ במקום זאת.

· ארגומנט המחיקה הוא פרוסת hash מפתח/ערך, השתמש בפרוסת hash

(ו) השתמשת בתחביר פרוסת hash של מפתח/ערך (%hash{...}) בתור הארגומנט ל"מחיקה".
כנראה התכוונת ל-@hash{...} עם סמל @ במקום זאת.

· קבועי רשימה קסומה אינם נתמכים

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

· הוספת הגדרה $/ להפניה של %s אסורה

חדש אזהרות

· %s בהפניה הוא ניסיוני:

תכונת ה"חסר אוטומטי" היא ניסיונית.

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

אזהרות יונפקו כעת בזמן הקומפילציה כאשר פעולות אלו יתגלו.

no if $] >= 5.01908, warnings => "ניסוי::autoderef";

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

· רצף של מספר רווחים בהגדרת כינוי charnames הוצא משימוש

רווח לבן נגרר בהגדרת כינוי charnames הוצא משימוש

שתי אזהרות הוצאה משימוש אלה הכוללות "\N{...}" יושמו באופן שגוי. הֵם
לא הזהירו כברירת מחדל (עכשיו הם כן) ולא ניתן היה להפוך אותו לקטלני באמצעות "אזהרות השתמש
FATAL => 'הוצא משימוש'" (עכשיו הם יכולים).

· אב טיפוס של תכונה (%s) משליך את תכונת אב טיפוס קודמת באותו תת

(W שונות) תת הוכרז בתור "sub foo : prototype(A) : prototype(B) {}", עבור
דוגמא. מכיוון שלכל משנה יכול להיות רק אב טיפוס אחד, ההצהרות המוקדמות יותר הן
נמחק בזמן שהאחרון מוחל.

· תו \0 לא חוקי ב-%s עבור %s: %s\0%s

(W syscalls) תווים \0 מוטבעים בשמות נתיבים או ארגומנטים אחרים של קריאת מערכת
להפיק אזהרה החל מ-5.20. המערכת התעלמה בעבר מהחלקים שאחרי ה-\0
שיחות.

· התאמת נקודת קוד שאינה Unicode 0x%X מול מאפיין Unicode; ייתכן שאינו נייד.

זה מחליף את ההודעה "נקודת הקוד 0x%X אינה Unicode, כל ההתאמות \p{} נכשלות; הכל
\P{} התאמות מצליחות".

· חסר ']' באב טיפוס עבור %s : %s

(W illegalproto) קיבוץ התחיל עם "[" אך מעולם לא נסגר עם "]".

· בעיית קדימות אפשרית עם מפעיל זרימת בקרה

(תחביר W) קיימת בעיה אפשרית בערבוב של מפעיל זרימת בקרה
(למשל "החזר") ואופרטור בעל קדימות נמוכה כמו "או". לשקול:

sub { return $a או $b; }

זה מנותח כ:

sub { (החזר $a) או $b; }

וזה למעשה רק:

sub { return $a; }

השתמש בסוגריים או בגרסה בעלת קדימות גבוהה של האופרטור.

שים לב שזה עשוי להיות מופעל גם עבור מבנים כמו:

sub { 1 אם למות; }

· ההתייחסות לאחר תיקון היא נסיונית

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

ללא אזהרות "ניסיוני::postderef";
השתמש בתכונה "postderef", "postderef_qq";
$ref->$*;
$aref->@*;
$aref->@[@indexes];
... וכו ...

· אב טיפוס '%s' נדחק על ידי התכונה 'אב טיפוס(%s)' ב-%s

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

· ערך סקלרי @%s[%s] כתוב טוב יותר בתור $%s[%s]

(תחביר W) בהקשר סקלרי, השתמשת בפרוסת אינדקס/ערך של מערך (מסומן ב-%)
כדי לבחור אלמנט בודד של מערך. בדרך כלל עדיף לבקש סקלר
ערך (מסומן ב-$). ההבדל הוא ש$foo[&bar] תמיד מתנהג כמו א
scalar, הן בערך שהוא מחזיר והן בעת ​​הערכת הטיעון שלו, while
%foo[&bar] מספק הקשר רשימה לכתב המשנה שלו, שיכול לעשות דברים מוזרים אם
אתה מצפה למנוי אחד בלבד. כאשר נקרא בהקשר של רשימה, הוא גם מחזיר את ה
אינדקס (מה &bar מחזיר) בנוסף לערך.

· ערך סקלרי @%s{%s} כתוב טוב יותר בתור $%s{%s}

(תחביר W) בהקשר סקלרי, השתמשת בפרוסת גיבוב מפתח/ערך (מסומן ב-%) כדי
בחר רכיב בודד של hash. בדרך כלל עדיף לבקש ערך סקלרי
(מסומן על ידי $). ההבדל הוא ש$foo{&bar} תמיד מתנהג כמו סקלר,
הן בערך שהוא מחזיר והן בעת ​​הערכת הארגומנט שלו, בעוד @foo{&bar} ו
מספק הקשר רשימה לכתב המשנה שלו, שיכול לעשות דברים מוזרים אם אתה
מצפה למנוי אחד בלבד. כשנקרא בהקשר של רשימה, הוא גם מחזיר את המפתח פנימה
תוספת לערך.

· הגדרת $/ להתייחסות ל-%s כצורה של slurp הוצאה משימוש, תוך התייחסות כ-undef

· יציאה לא צפויה %u

(S) יציאה () נקרא או שהתסריט הסתיים בצורה חיננית כאשר
"PERL_EXIT_WARN" הוגדר ב-"PL_exit_flags".

· כשל יציאה לא צפוי %d

(ש) לא נתפס למות () נקרא כאשר "PERL_EXIT_WARN" הוגדר ב-"PL_exit_flags".

· השימוש בתווי שליטה מילוליים בשמות משתנים הוצא משימוש

(D הוצא משימוש) שימוש בתווי בקרה מילוליים במקור כדי להתייחס ל-^FOO
משתנים, כמו $^X ו-${^GLOBAL_PHASE} הוצאו משימוש. זה משפיע רק על הקוד
כמו $\cT, כאשר \cT הוא פקד (כמו "SOH") בקוד המקור: ${"\cT"} ו-$^T
להישאר בתוקף.

· שימוש חסר תועלת במשנה חמדנות

זה מתקן את [Perl #42957].

שינויים ל קיים אבחון
· אזהרות ושגיאות מהמנוע regexp נקיות כעת ב-UTF-8.

· בהודעת השגיאה "מצב מתג לא ידוע" יש כמה שינויים קלים. השגיאה הזו
מופעל כאשר יש מצב לא ידוע בתנאי "(?(foo))". הטעות
הודעה שנהגה לקרוא:

מצב מתג לא ידוע (?(%s ב-Regex;

אבל מה ש-%s יכול להיות תלוי בעיקר במזל. עבור "(?(foobar))", אולי ראית
"fo" או "f". עבור תווי Unicode, בדרך כלל תקבל מחרוזת פגומה. ה
ההודעה שונתה לקריאה:

מצב מתג לא ידוע (?(...)) ב-Regex;

בנוסף, הסמן '<-- HERE' בשגיאה יצביע כעת על הנקודה הנכונה
הרקס.

· האזהרה "%s "\x%X" אינה ממפה ל-Unicode" רשומה כעת כראוי כחמורה
אזהרה ולא כשגיאה קטלנית.

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

· "שימוש מעורפל ב-* נפתר כאופרטור *": אזהרות זה ואזהרות דומות לגבי "%" ו
"&" נהג להתרחש בנסיבות מסוימות שבהן לא היה מפעיל מהסוג שצוטט,
אז האזהרה הייתה שגויה לחלוטין. זה תוקן [perl #117535, #76910].

· אזהרות לגבי אבות-טיפוס פגומים של תת-שגרה עקביות כעת יותר באופן שבו
אבות טיפוס מוצגים. חלק מהאזהרות הללו יקצצו אבות טיפוס המכילים
אפס. במקרים אחרים אזהרה אחת תדחיק אחרת. האזהרה על לא חוקי
דמויות באבות טיפוס כבר לא אומרות "אחרי '_'" אם הדמות הרעה באה לפני
הקו התחתון.

· כללי הקיפול של Perl אינם מעודכנים עבור 0x%X; אנא השתמש בכלי השירות perlbug כדי
להגיש תלונה; ב-regex; מסומן על ידי <-- כאן ב-m/%s/

הודעה זו נמצאת כעת רק בקטגוריית הביטוי הרגולרי, ולא בקטגוריה שהוצאה משימוש.
זו עדיין אזהרת ברירת מחדל (כלומר, חמורה) [perl #89648].

· %%s[%s] בהקשר סקלרי כתוב בצורה טובה יותר בתור $%s[%s]

אזהרה זו מתרחשת כעת עבור כל %array[$index] או %hash{key} שידוע כי הם בסקלרים
הקשר בזמן הידור. בעבר הוא נכתב "ערך סקלארי %%s[%s] טוב יותר
נכתב בתור $%s[%s]".

· מצב המתג לא מזוהה ב-Regex; מסומן על ידי <-- כאן ב-m/%s/:

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

· הודעות השגיאה עבור "my($a?$b$c)" ו-"my(do{})" מזכירות כעת "מותנה
expression" ו-"do block", בהתאמה, במקום לקרוא 'Can't declare null
פעולה ב"שלי"'.

· כאשר "use re "debug"" מבצע ביטוי רגולרי המכיל הפניה לאחור, ניפוי הבאגים
הפלט מציג כעת איזו מחרוזת מתאימה.

· הודעת השגיאה הקטלנית כעת "הדמות הבאה "\c" חייבת להיות ASCII" נוסחה מחדש
בתור "תו שאחרי "\c" חייב להיות ASCII להדפסה" כדי להדגיש את זה ב-"\cX", X
חייב להיות להדפסה (אי שליטה) תו ASCII.

שירות שינויים


a2p

· קריסה אפשרית כתוצאה משגיאה של off-by-one בעת ניסיון לגשת לפני ההתחלה
של מאגר תוקן. [perl #120244]

bisect.pl

הכלי לחציית git Porting/bisect.pl היו שיפורים רבים.

הוא מסופק כחלק מהפצת המקור אך אינו מותקן כי הוא לא
עצמאי שכן הוא מסתמך על התנהלות מתוך קופה git. שימו לב גם שזה
לא עושה שום ניסיון לתקן בדיקות, לתקן באגים בזמן ריצה או לעשות משהו שימושי להתקנה -
מטרתו היא לבצע שינויים מינימליים כדי לבנות כל עדכון היסטורי של עניין
ולרוץ כמה שיותר קרוב ל-"as-was", ובכך להפוך את "git bisect" לקל לשימוש.

· ניתן להפעיל את מקרה המבחן באופן אופציונלי עם פסק זמן.

· יכול כעת לפעול במקום בקופה נקייה של Git.

· יכול להריץ את מקרה הבדיקה תחת "valgrind".

· יכול להחיל תיקונים ותיקונים שסופקו על ידי המשתמש לקופה לפני הבנייה.

· יש כעת תיקונים כדי לאפשר בניית עוד מספר טווחים היסטוריים של bleadperl, אשר
יכול להיות שימושי לאיתור מקורם של באגים או שינויים בהתנהגות.

find2perl

· find2perl מטפל כעת ב-"?" תווים כלליים כהלכה. [perl #113054]

פרלבאג

· פרלבאג כעת יש אפשרות "-p" לצירוף תיקונים עם דוח באג.

· perlbug שונתה כדי לספק את תבנית הדוח עם סיומת קו CRLF
חלונות. [perl #121277 ]

· perlbug מניח כעת כמה שפחות הנחות לגבי הקידוד של הדוח.
זה כנראה ישתנה בעתיד כדי להניח UTF-8 כברירת מחדל אך לאפשר למשתמש
לעקוף.

תְצוּרָה ו Compilation


· Makefile.PL עבור SDBM_File כעת יוצר טוב יותר קובץ Makefile, מה שנמנע ממירוץ
מצב במהלך ייצור מקביל, שעלול לגרום לכשל בבנייה. זה
בעיה אחרונה ידועה מקבילה (בפלטפורמות *nix), ולכן אנו מאמינים כי א
מקבילי אמור כעת להיות ללא שגיאות.

· installperl ו מתקיןהטיפול באופציות של האופציות שופץ לשימוש ב-Getopt::Long.
שניהם משמשים את קובץ Makefile "התקן" יעדים, ואינם מותקנים, אז אלה
סביר להניח ששינויים ישפיעו רק על סקריפטים של התקנה מותאמים אישית.

· לאפשרויות של אותיות בודדות יש כעת גם שמות ארוכים.

· אפשרויות לא חוקיות נדחות כעת.

· ארגומנטים של שורת הפקודה שאינם אופציות נדחים כעת.

· לכל אחד יש כעת אפשרות "--help" להצגת הודעת השימוש.

ההתנהגות של כל הפניות המתועדות התקפות אינה משתנה.

· במידת האפשר, ה-build נמנע כעת מקריצות רקורסיביות של לעשות כאשר בונים טהור-
הרחבות Perl, מבלי להסיר כל מקביליות מהמבנה. כרגע בסביבות 80
ניתן לעבד הרחבות ישירות על ידי make_ext.pl כלי, כלומר 80
קריאות של לעשות ו-160 קריאות של מיניפרל אינם עשויים יותר.

· מערכת הבנייה פועלת כעת כהלכה בעת קומפילציה תחת GCC או Clang עם זמן קישור
אופטימיזציה מופעלת (אפשרות "-flto"). [perl #113022]

· שמות בסיס ספרייה ברורים עם "d_libname_unique".

בעת קומפילציה של perl עם אפשרות זו, קבצי הספרייה עבור מודולי XS מקבלים שם
משהו "ייחודי" -- לדוגמה, Hash/Util/Util.so הופך
Hash/Util/PL_Hash__Util.so. התנהגות זו דומה למה שקורה כעת
VMS, ומשמש כבסיס ליציאת אנדרואיד.

· אפשרות "sysroot" לציון ספריית השורש הלוגית תחת gcc ו-clang.

כאשר בונים עם ערכת אפשרויות זו, גם Configure וגם המהדרים מחפשים את כולם
כותרות וספריות תחת ה-sysroot החדש הזה, במקום /.

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

· מודל הקומפילציה צולבת שופץ. יש כמה אפשרויות חדשות, וכמה
שינויים שאינם תואמים לאחור:

כעת אנו בונים קבצים בינאריים עבור miniperl ו-general_uudmap לשימוש במארח, במקום זאת
מאשר להפעיל כל קריאת מיניפרל על המטרה; זה אומר שבקיצור של 'עשה מבחן',
אין לנו עוד צורך בגישה למערכת היעד לאחר סיום ההגדרה. אתה יכול לספק
קבצים בינאריים שנבנו כבר דרך האפשרויות "hostperl" ו-"hostgenerate" להגדרה.

בנוסף, אם ממקדים לפלטפורמת EBCDIC מארח ASCII, או להיפך,
צריך להפעיל את Configure עם "-Uhostgenerate", כדי לציין שgener_uudmap צריך
להיות רץ על המטרה.

לבסוף, יש גם דרך לגרום ל-Configure להסתיים מוקדם, מיד לאחר בניית ה-
מארח בינאריים, על ידי קומפילציה צולבת מבלי לציין "מארח יעד".

השינויים הבלתי תואמים כוללים אי שימוש יותר ב-xconfig.h, xlib או Cross.pm, אז
קבצי תצורה משומרים ו-Makefiles יצטרכו להתעדכן.

· קשור לאמור לעיל, יש כעת דרך לציין את המיקום של sh (or
שווה ערך) במערכת היעד: "targetsh".

לדוגמה, לאנדרואיד יש את ה-sh שלו ב- /system/bin/sh, אז אם עושים קומפילציה צולבת מ-more
מערכת יוניקסי רגילה עם sh in / Bin / sh, "targetsh" יסתיים בתור /system/bin/sh, ו
"sh" בתור /bin/sh.

· כברירת מחדל, gcc 4.9 עושה כמה אופטימיזציות ששוברות את perl. ה -fwrapv אוֹפְּצִיָה
משבית את האופטימיזציות הללו (וכנראה אחרות), כך עבור gcc 4.3 ואילך (מאז
יתכן ובעיות דומות אורבות גם בגרסאות ישנות יותר, אבל -fwrapv היה
שבור לפני 4.3, והאופטימיזציות כנראה לא ייעלמו), גדר כעת מוסיף
-fwrapv אלא אם כן המשתמש מבקש -fno-wrapv, שמשבית -fwrapv, או
-fsanitize=לא מוגדר, מה שהופך את ההצפה -fwrapv מתעלם משגיאות זמן ריצה.
[perl #121505 ]

בדיקות


· מטרת make "test.valgrind" מאפשרת כעת ביצוע בדיקות במקביל. היעד הזה
מאפשר להפעיל את חבילת הבדיקות של Perl תחת Valgrind, שמזהה סוגים מסוימים של C
שגיאות תכנות, אם כי בעלות משמעותית בזמן הריצה. על חומרה מתאימה,
מה שמאפשר ביצוע מקביל לגבות הרבה מהעלות הנוספת הזו. [perl #121431]

· מבחנים שונים ב t/porting/ לא מדלגים עוד כאשר ה-perl .גיט הספרייה היא
מחוץ לעץ הפרל והצביע עליו על ידי $GIT_DIR. [perl #120505]

· חבילת הבדיקה כבר לא נכשלת כאשר המעטפת האינטראקטיבית של המשתמש שומרת על $PWD
משתנה סביבה, אבל ה / Bin / sh משמש להפעלת בדיקות לא.

פלטפורמה תמיכה


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

ביטריג
נוספה תמיכת קומפילציה עבור Bitrig, מזלג של OpenBSD.

FreeMiNT
נוספה תמיכה עבור FreeMiNT, מערכת הפעלה חינמית בקוד פתוח עבור מערכת Atari ST ו
יורשיו, המבוססים על MiNT המקורי שאומץ רשמית על ידי עטרי.

Synology
Synology שולחת את קופסאות ה-NAS שלה עם הפצת לינוקס רזה (DSM) בזול יחסית
מעבדים (כמו Marvell Kirkwood mv6282 - ARMv5tel או Freescale QorIQ P1022 ppc -
e500v2) לא מיועד לתחנות עבודה או פיתוח. הקופסאות האלה צריכות לבנות עכשיו. ה
בעיות בסיסיות הן המיקום הלא סטנדרטי של כלים.

הופסק פלטפורמות
"ספיו"
קוד הקשור לתמיכה במערכת ה-I/O "sfio" הוסר.

Perl 5.004 הוסיפה תמיכה לשימוש ב-API המקורי של "sfio", ה-Safe/Fast I/O של AT&T
סִפְרִיָה. קוד זה עדיין בנוי עם v5.8.0, אם כי עם מבחני רגרסיה רבים שנכשלו,
אבל נשבר בטעות לפני שחרור v5.8.1, כלומר זה לא עבד
על כל גרסה של Perl שפורסמה מאז. במשך למעלה מעשור לא קיבלנו שום באג
מדווח על כך, מכאן שברור שאף אחד לא משתמש בפונקציונליות הזו באף אחד
גרסה של Perl שעדיין נתמכת בכל רמה.

AT&T 3b1
הגדר תמיכה עבור 3b1, הידוע גם כ-AT&T Unix PC (ו-AT&T הדומה
7300), הוסר.

DG/UX
DG/UX היה Unix שנמכר על ידי Data General. המהדורה האחרונה הייתה באפריל 2001. זה בלבד
פועל על החומרה של Data General עצמו.

EBCDIC
בהיעדר מקור קבוע לדיווחי עשן, קוד נועד לתמוך במקור
פלטפורמות EBCDIC יוסרו מ-perl לפני 5.22.0.

פלטפורמה ספציפית הערות
Cygwin
· recv () על ידית מחוברת יאכלס את כתובת השולח המוחזרת
כל מה שקרה היה במאגר העבודה. recv () משתמש כעת בפתרון עוקף
דומה ל-Win32 recv () עוטף ומחזיר מחרוזת ריקה כאשר להתעדכן(2)
אינו משנה את אורך הכתובת שסופקה. [perl #118843]

· תוקנה שגיאת בנייה ב-cygwin.c ב-Cygwin 1.7.28.

בדיקות כעת מטפלות בשגיאות המתרחשות כאשר "cygserver" אינו פועל.

GNU / Hurd
ספריית תאימות BSD "libbsd" אינה נדרשת עוד עבור בנייה.

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

OS Mac
מערכת הבנייה מכבדת כעת הגדרת "ld" שסופקה על ידי המשתמש הפועל גדר.

חצות BSD
"objformat" הוסר מגרסה 0.4-RELEASE של MidnightBSD והיה
הוצא משימוש בגרסאות קודמות. זה גרם לסביבת הבנייה להיות שגויה
מוגדר עבור "a.out" ולא "אלף". זה תוקן כעת.

פלטפורמות מעורבות
הקוד התומך בפעולות "pack" ו-"unpack" בפלטפורמות אנדיאניות מעורבות
הוסר. אנו מאמינים שפרל כבר מזמן לא הצליחה לבנות על אנדיאן מעורב
ארכיטקטורות (כגון PDP-11s), אז אנחנו לא חושבים שהשינוי הזה ישפיע על כל
פלטפורמות שהצליחו לבנות את v5.18.0.

VMS
· התכונה "PERL_ENV_TABLES" לשליטה באוכלוסיית %ENV בעת הפעלת perl
היה שבור ב-Perl 5.16.0 אך תוקן כעת.

· דלג על בדיקות גישה בשלטים בפנים opendir (). [perl #121002]

· יש בדיקה למטא-תווים גלוב בנתיב המוחזר על ידי האופרטור "glob()".
הוחלף בהמחאה לתווים כלליים של VMS. זה חוסך משמעותית
מספר קריאות "lstat()" מיותרות כך שכמה פעולות גלוב פשוטות הופכות
60-80% מהר יותר.

Win32
· "שנה שם" ו"קישור" ב-Win32 הגדר כעת $! ל-ENOSPC ול-EDQUOT במידת הצורך.
[perl #119857]

· אפשרויות ה-makefile BUILD_STATIC ו-ALL_STATIC לקישור חלק או (כמעט) כולם
הרחבות באופן סטטי (ל-perl520.dll, וגם לתוך perl-static.exe נפרד)
נשברו עבור בניית MinGW. זה תוקן כעת.

אפשרות ALL_STATIC שופרה גם כדי לכלול את ה-Encode ו-Win32
הרחבות (הן עבור VC++ ו-MinGW builds).

· נוספה תמיכה בבנייה עם Visual C++ 2013. כרגע יש שניים
כשלי בדיקה אפשריים (ראה "בדיקת Perl ב-Windows" ב-perlwin32) אשר יעשו זאת
מקווה שייפתר בקרוב.

· נוספה תמיכה ניסיונית לבנייה עם Intel C++ Compiler. ה
nmake makefile (win32/Makefile) וה-dmake makefile (win32/makefile.mk) יכולים להיות
בשימוש. "מבחן nmake" לא יעבור בשלב זה עקב cpan/CGI/t/url.t.

· הריגת עץ תהליך עם "הרוג" ב-perlfunc וסימן שלילי, נשברה
החל מ-5.18.0. בבאג זה, "הרוג" תמיד החזיר 0 עבור אות שלילי
אפילו עבור PIDs חוקיים, ושום תהליכים לא הופסקו. זה תוקן [perl
#121230].

· הזמן שנדרש לבניית perl ב-Windows הצטמצם באופן משמעותי למדי (זמן
בדרך כלל ניתן לראות חיסכון באזור של 30-40%) על ידי הפחתת מספר,
בדרך כלל נכשל, I/O קורא לכל "require()" (for miniperl.exe רק). [פרל
#121119 ]

· כ-15 דקות של שינה סרק הוסרו מהפעלת "מבחן עשה" עקב א
באג שבו לא ניתן היה לבטל את צג הזמן הקצוב המשמש לבדיקות ברגע שה
הבדיקה מסתיימת, ותקופת הזמן הקצוב המלאה חלפה לפני הפעלת הבדיקה הבאה
קוֹבֶץ. [perl #121395 ]

· על פרל שנבנה ללא פסאודו-מזלג (בניית פסאודו-מזלג לא הושפעו מכך
באג), הרג עץ תהליך עם "kill()" ואות שלילי הביא
"kill()" הופך את הערך המוחזר. לדוגמה, אם "kill()" הרג תהליך אחד
PID של עץ אז הוא החזיר 0 במקום 1, ואם "kill()" עבר 2 לא חוקי
PIDs ואז זה החזיר 2 במקום 0. זה כנראה היה המקרה מאז
תכונת הרג עץ תהליך הוטמעה ב-Win32. זה תוקן כעת
לעקוב אחר ההתנהגות המתועדת. [perl #121230
]

· בעת בניית perl של 64 סיביות, זיכרון לא מאותחל נקרא פנימה miniperl.exe, בשימוש
במהלך תהליך הבנייה, יכול להוביל ל-4GB wperl.exe נוצר. יש לזה
כעת תוקן. (ציין זאת perl.exe עצמו לא הושפע, אבל ברור
wperl.exe היה שבור לחלוטין.) [perl #121471
]

· כעת ניתן לבנות עם Perl gcc גרסה 4.8.1 מhttp://www.mingw.org>. זֶה
היה שבור בעבר עקב הגדרה לא נכונה של DllMain () באחד של perl's
קובץ מקור. מוקדם יותר gcc גרסאות הושפעו גם בעת שימוש בגרסה 4 של
חבילת w32api. גרסאות של gcc זמין מ
<http://mingw-w64.sourceforge.net/> לא הושפעו. [perl #121643
]

· לרתום הבדיקה אין כעת כשלים כאשר perl בנוי על כונן FAT עם ה-
מערכת ההפעלה Windows בכונן NTFS. [perl #21442
]

· בעת שיבוט ההקשר מחסום מזלג() חיקוי, Perl_cx_dup() היה מתרסק
גישה למידע על פרמטרים עבור ערכי מחסנית הקשר שכללו מס'
פרמטרים, כמו עם "&foo;". [perl #121721
]

· הוצג על ידי perl #113536
, דליפת זיכרון על כל
קריאה ל-"system" ו-backticks (" `` "), ברוב Win32 Perls החל מ-5.18.0
תוקן. דליפת הזיכרון התרחשה רק אם הפעלת את psuedo-fork במכשיר שלך
build של Win32 Perl, והריצו את ה-build הזה על Server 2003 R2 או מערכת הפעלה חדשה יותר.
הדליפה לא מופיעה ב-WinXP SP3. [perl #121676
]

WinCE
· המבנה של מודולי XS שוחזר ברובו. כמה עדיין לא יכולים (עדיין)
להיבנות אבל עכשיו אפשר לבנות את Perl ב-WinCE עם כמה מהם בלבד
תיקונים נוספים (ל-Socket ו-ExtUtils::MakeMaker), בתקווה שישולבו
בקרוב.

· כעת ניתן לבנות את Perl במכה אחת ללא התערבות משתמש ב-WinCE על ידי הפעלה
"nmake -f Makefile.ce all".

התמיכה בבנייה עם EVC (Embedded Visual C++) 4 שוחזרה. פרל יכול
נבנה גם באמצעות התקנים חכמים עבור Visual C++ 2005 או 2008.

פנימי שינויים


· הייצוג הפנימי השתנה עבור משתני ההתאמה $1, $2 וכו', $`, $&,
$', ${^PREMATCH}, ${^MATCH} ו-${^POSTMATCH}. זה משתמש קצת פחות זיכרון, נמנע
השוואות מחרוזות והמרות מספריות במהלך חיפוש, ומשתמש ב-23 שורות פחות של
ג. שינוי זה לא אמור להשפיע על קוד חיצוני כלשהו.

· מערכים משתמשים כעת ב-NULL באופן פנימי כדי לייצג חריצים שאינם בשימוש, במקום &PL_sv_undef.
&PL_sv_undef כבר לא מטופל כערך מיוחד, אז av_store(av, 0, &PL_sv_undef)
יגרום לאלמנט 0 של אותו מערך להחזיק סקלאר לא מוגדר לקריאה בלבד. "$array[0] =
כל דבר" יקרקר ו-"\$array[0]" ישווה ל-"\undef".

· ה-SV חזר על ידי HeSVKEY_force() כעת משקף בצורה נכונה את UTF8ness של
מפתח hash בסיסי כאשר מפתח זה אינו מאוחסן כ-SV. [perl #79074]

· פונקציות ופקודות מאקרו מסוימות בשימוש נדיר הזמינות לקוד XS הוצאו משימוש כעת.
אלה הם: "utf8_to_uvuni_buf" (השתמש ב-"utf8_to_uvchr_buf" במקום זאת),
"valid_utf8_to_uvuni" (השתמש ב-"utf8_to_uvchr_buf" במקום זאת), "NATIVE_TO_NEED" (זה עשה
לא עבד כמו שצריך בכל מקרה), ו-"ASCII_TO_NEED" (זה לא עבד כמו שצריך בכל מקרה).

החל במהדורה זו, כמעט אף פעם אין צורך להבחין בקוד היישום
בין מערך התווים של הפלטפורמה לבין Latin1, שבו 256 התווים הנמוכים ביותר של
Unicode מבוססים. קוד חדש לא צריך להשתמש ב-"utf8n_to_uvuni" (השתמש ב-"utf8_to_uvchr_buf"
במקום זאת), ולא "uvuni_to_utf8" (השתמש במקום זאת ב-"uvchr_to_utf8),

· קיצורי הדרך של Makefile מתמקדים בבדיקות וביצירת פרופילים לעתים רחוקות (או אף פעם לא).
היעדים הוסרו, או מוזגו למטרה היחידה האחרת של Makefile שמשתמשת
אוֹתָם. ספציפית, היעדים הללו נעלמו, יחד עם תיעוד שהתייחס
אותם או הסביר כיצד להשתמש בהם:

check.third check.utf16 check.utf8 coretest minitest.prep
minitest.utf16 perl.config.dashg perl.config.dashpg
perl.config.gcov perl.gcov perl.gprof perl.gprof.config
perl.pixie perl.pixie.atom perl.pixie.config perl.pixie.irix
perl.third perl.third.config perl.valgrind.config purecovperl
pureperl quantperl test.deparse test.taintwarn test.third
test.torture test.utf16 test.utf8 test_notty.deparse
test_notty.third test_notty.valgrind test_prep.third
test_prep.valgrind torturetest ucheck ucheck.third ucheck.utf16
ucheck.valgrind utest utest.third utest.utf16 utest.valgrind

עדיין אפשר להפעיל את הפקודות הרלוונטיות ב"יד" - ללא בסיס
הפונקציונליות הוסרה.

· כעת ניתן למנוע מ-Perl לאתחל טיפול מקומי. לרוב,
פרל לא שם לב למיקום. (ראה perllocale.) למרות זאת, עד עכשיו, הלאה
אתחול, הוא תמיד אתחול את הטיפול המקומי לברירת המחדל של המערכת, ליתר בטחון
התוכנית שמתבצעת מסתיימת בשימוש מקומיים. (זה אחד הדברים הראשונים א
תוכנית מודעת למיקום צריכה לעשות זאת, הרבה לפני ש-Perl יודע אם באמת יהיה צורך בה
או לא.) זה עובד טוב למעט כאשר Perl מוטמע ביישום אחר אשר
רוצה מיקום שאינו ברירת המחדל של המערכת. עכשיו, אם משתנה הסביבה
"PERL_SKIP_LOCALE_INIT" מוגדר בזמן הפעלת Perl, שלב האתחול הזה
מדלג. לפני כן, בפלטפורמות Windows, הדרך היחידה לעקיפת הבעיה
החסר היה שימוש בעותק פרוץ של קוד פרל פנימי. יישומים שצריכים
כדי להשתמש ב-Perls ישנים יותר יכולים לגלות אם ה-Perl המוטבע שבו הם משתמשים זקוק ל-
פתרון עוקף על ידי בדיקה שסמל C preprocessor "HAS_SKIP_LOCALE_INIT" אינו
מוּגדָר. [RT #38193]

· "BmRARE" ו-"BmPREVIOUS" הוסרו. הם לא שימשו בשום מקום והם לא
חלק מה-API. עבור מודולי XS, הם כעת # מוגדרים כ-0.

· "sv_force_normal", שבדרך כלל מקרקר על ערכי קריאה בלבד, משמש כדי לאפשר קריאה בלבד
ערכים שיש לשנות בזמן ההידור. זה השתנה לקרקור לקריאה בלבד
ערכים בלי קשר. שינוי זה חשף מספר באגים מרכזיים.

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

לדוגמה:

$ perl -MDevel::Peek -e'$a="abc"; $b = $a; לזרוק $a; זרוק $b'
SV = PV(0x260cd80) at 0x2620ad8
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
CUR = 3
LEN = 16
COW_REFCNT = 1
SV = PV(0x260ce30) at 0x2620b20
REFCNT = 1
FLAGS = (POK,IsCOW,pPOK)
PV = 0x2619bc0 "abc"\0
CUR = 3
LEN = 16
COW_REFCNT = 1

שים לב ששני הסקלרים חולקים את אותו מאגר PV ויש להם COW_REFCNT גדול מ
אפס.

המשמעות היא שקוד XS שרוצה לשנות את המאגר "SvPVX()" של SV צריך
קרא תחילה "SvPV_force()" או דומה, כדי להבטיח מאגר חוקי (ולא משותף), וכדי
קרא "SvSETMAGIC()" לאחר מכן. זה למעשה תמיד היה המקרה (למשל
מפתחות hash כבר היו העתק-על-כתיבה); השינוי הזה רק מפיץ את התנהגות הפרה ל-a
מגוון רחב יותר של SVs.

אחד הבדלים חשובים הוא שלפני 5.18.0, פעם היו לסקלארים משותפים של מפתחות hash.
סט הדגל "SvREADONLY"; זה כבר לא המקרה.

עדיין ניתן להשבית התנהגות חדשה זו על ידי הפעלה גדר עם
-Accflags=-DPERL_NO_COW. אפשרות זו תוסר כנראה ב-Perl 5.22.

· "PL_sawampersand" הוא כעת קבוע. המתג שמשתנה זה סיפק (ל
הפעל/השבת את העותק שלפני המשחק בהתאם לאם נראתה $&) כבר
הוסר והוחלף ב-copy-on-write, ביטול כמה באגים.

עדיין ניתן להפעיל את ההתנהגות הקודמת על ידי הפעלה גדר עם
-Accflags=-DPERL_SAWAMPERSAND.

· הפונקציות "my_swap", "my_htonl" ו-"my_ntohl" הוסרו. זה לא ברור
מדוע פונקציות אלו סומנו אי פעם כ A, חלק מה-API. קוד XS לא יכול להתקשר אליהם
ישירות, מכיוון שהוא לא יכול לסמוך על הידור שלהם. באופן לא מפתיע, אין קוד ב-CPAN
מפנה אליהם.

· החתימה של הפונקציה הרגולרית "Perl_re_intuit_start()" השתנתה; הפונקציה
pointer "intuit" במבנה הפלאגין של מנוע regex השתנה גם הוא בהתאם. א
פרמטר חדש, "strbeg" נוסף; יש לזה אותה משמעות כמו אותו שם
פרמטר ב-"Perl_regexec_flags". בעבר האינטואיט היה מנסה לנחש את ההתחלה של
המחרוזת מה-SV שעבר (אם יש), ולפעמים תטעה (למשל עם an
SV עמוס מדי).

· החתימה של הפונקציה הרגולרית "Perl_regexec_flags()" השתנתה; הפונקציה
גם pointer "exec" במבנה הפלאגין של מנוע regex השתנה כדי להתאים. ה
לפרמטר "minend" יש כעת סוג "SSize_t" כדי לתמוך טוב יותר במערכות 64 סיביות.

· קוד XS עשוי להשתמש בפקודות מאקרו שונות כדי לשנות את האותיות של תו או נקודת קוד (עבור
דוגמה "toLOWER_utf8()"). רק כמה מהם תועדו עד כה; ועכשיו
יש להשתמש בהם על פני קריאה לפונקציות הבסיסיות. ראה "דמות
משתנה מקרה" בפרלפי.

· הקוד עסק בצורה לא עקבית עם uids ו-gids. כמה מקומות הניחו שכן
ניתן לאחסן בבטחה ב-UV, אחרים ב-IV, אחרים ב-ints. ארבע פקודות מאקרו חדשות
הציג: SvUID(), sv_setuid(), SvGID(), ו sv_setgid()

· "sv_pos_b2u_flags" נוסף ל-API. זה דומה ל-"sv_pos_b2u", אבל
תומך במחרוזות ארוכות בפלטפורמות של 64 סיביות.

· "PL_exit_flags" יכולים לשמש כעת על ידי מטמיעות perl או קוד XS אחר כדי לקבל "אזהרות" של perl
או "להפסיק" בניסיון יציאה. [perl #52000]

· הידור עם "-Accflags=-PERL_BOOL_AS_CHAR" מאפשר כעת למהדרים של C99 ו-C++
לחקות את הכינוי של "bool" ל-"char" ש-perl עושה עבור מהדרים של C89. [פרל
#120314]

· הארגומנט "sv" ב-"sv_2pv_flags" ב-perlapi, "sv_2iv_flags" ב-perlapi,
"sv_2uv_flags" ב-perlapi, ו-"sv_2nv_flags" ב-perlapi והעטיפות הישנות שלהם
sv_2pv, sv_2iv, sv_2uv, sv_2nv, כעת אינו NULL. העברת NULL כעת תקרוס. מתי
הסמן שאינו NULL הוצג בהמוניהם ב-5.9.3, הפונקציות סומנו ללא-
NULL, אבל מאז יצירת ה-API של SV ב-5.0 alpha 2, אם NULL הועבר,
פונקציות החזירו 0 או ערכים מסוג false. הקוד התומך בהיותו של ארגומנט "sv".
ללא NULL תאריכים ישירות ל-5.0 alpha 2, ובעקיפין ל-Perl 1.0 (לפני 5.0 api). ה
חוסר תיעוד לכך שהפונקציות קיבלו "sv" NULL תוקן ב-5.11.0
ובין 5.11.0 ל-5.19.5 הפונקציות סומנו NULLOK. כאופטימיזציה של
קוד NULLOK הוסר כעת, והפונקציות הפכו שוב לא-NULL,
מכיוון שפקודות מאקרו מסוג גטר ליבה לעולם אינן מעבירות NULL לפונקציות הללו והן יקרסו
לפני שעבר אי פעם NULL.

הדרך היחידה שבה ניתן להעביר "sv" NULL לפונקציות sv_2*v* היא אם קוד XS ישירות
קורא sv_2*v*. זה לא סביר מכיוון שקוד XS משתמש בפקודות מאקרו Sv*V* כדי לקבל את הבסיס
ערך מתוך SV. מצב אפשרי אחד שמוביל להעברת NULL "sv".
פונקציות sv_2*v*, זה אם קוד XS מגדיר פקודות מאקרו מסוג getter משלו Sv*V*, שבודקות
עבור NULL לפני זיהוי ובדיקת הדגלים של ה-SV באמצעות API ציבורי Sv*OK*
פקודות מאקרו או ישירות באמצעות ממשק API פרטי "SvFLAGS", ואם "sv" הוא NULL, אז קריאה ל-
sv_2*v מתפקד עם מילת NULL או העברת ה-"sv" המכיל ערך NULL.

· newATTRSUB הוא כעת מאקרו

ה-API הציבורי newATTRSUB היה בעבר מאקרו לפונקציה הפרטית
Perl_newATTRSUB. הפונקציה Perl_newATTRSUB הוסרה. newATTRSUB הוא כעת מאקרו ל
פונקציה פנימית שונה.

· שינויים באזהרות שהועלו על ידי "utf8n_to_uvchr()"

פונקציה זו ברמה התחתונה מפענחת את התו הראשון של מחרוזת UTF-8 לקוד
נְקוּדָה. הוא נגיש לקוד ברמת "XS", אך לא מומלץ להשתמש בו
ישירות. יש פונקציות ברמה גבוהה יותר שקוראות לזה שצריך להשתמש בהן
במקום זאת, כגון "utf8_to_uvchr_buf" ב-perlapi. אבל למען השלמות, זה
מתעד כמה שינויים בו. כעת, בדיקות למומים נעשות לפני כל בדיקות
לבעיות פוטנציאליות אחרות. אחת מהבעיות האלה כוללת נקודות קוד גדולות כל כך
הם מעולם לא הופיעו בשום תקן רשמי (התקן הנוכחי השתנה
להחזיר את נקודת הקוד הגבוהה ביותר המקובלת מגרסאות קודמות). זה אפשרי (אם כי
לא נעשה ב-CPAN) כדי להזהיר ו/או לאסור נקודות קוד אלו, תוך קבלת נקודות קטנות יותר
נקודות קוד שעדיין נמצאות מעל למקסימום Unicode החוקי. הודעת האזהרה עבור
זה כולל כעת את נקודת הקוד אם ניתן לייצוג במכונה. בעבר זה
תמיד מציג בתים גולמיים, וזה מה שהוא עדיין עושה עבור קוד שאינו ניתן לייצוג
נקודות.

· שינויים במנוע Regexp המשפיעים על ממשק מנוע Regex הניתן לחיבור

דגלים רבים שנחשפו בעבר דרך regexp.h ושימשו לאכלוס הדגלים
חבר ב-struct regexp הוסרו. שדות אלה היו פרטיים מבחינה טכנית
מנוע regexp של פרל עצמו ולא היה צריך להיחשף שם מלכתחילה.

הדגלים המושפעים הם:

RXf_NOSCAN
RXf_CANY_SEEN
RXf_GPOS_SEEN
RXf_GPOS_FLOAT
RXf_ANCH_BOL
RXf_ANCH_MBOL
RXf_ANCH_SBOL
RXf_ANCH_GPOS

כמו גם מסכות הדגל הבאות:

RXf_ANCH_SINGLE
RXf_ANCH

כולם שונו ל-PREGf_ מקבילים והועברו ל-regcomp.h.

ההתנהגות שהושגה בעבר על ידי הגדרת אחד או יותר מדגלי RXf_ANCH_ (via
מסיכת RXf_ANCH) הוחלפו כעת בביט דגל *יחיד* ב-extflags:

RXf_IS_ANCHORED

מנועי regex הניתנים לחיבור שבעבר השתמשו כדי להגדיר את הדגלים האלה צריכים כעת להגדיר זאת
דגל לבד.

· ליבת Perl משתמשת כעת באופן עקבי ב-"av_tindex()" ("האינדקס העליון של מערך") בתור
מילה נרדפת בעלת שם ברור יותר ל-"av_len()".

· משתנה המתורגמן הלא ברור "PL_timesbuf" צפוי להיות מוסר בשלב מוקדם של
סדרת פיתוח 5.21.x, כך ש-Perl 5.22.0 לא תספק אותה למחברי XS.
בעוד שהמשתנה עדיין קיים ב-5.20.0, אנו מקווים שאזהרה מוקדמת זו של
הוצאה משימוש יעזור לכל מי שמשתמש במשתנה זה.

נבחר חרק תיקונים


רגיל ביטויים
· תוקן מספר קטן של קונסטרוקציות של ביטויים רגועים שעלולים לא להתאים או לקרוס
perl כאשר המחרוזת שהתואמת אליה הוקצתה מעל קו 2GB ב-32 סיביות
מערכות. [RT #118175]

· דליפות זיכרון שונות הכוללות ניתוח של הביטוי הרגולרי "(?[...])".
הבנייה תוקנו.

· "(?[...])" מאפשר כעת אינטרפולציה של דפוסים מהודרים מראש המורכבים מ"(?[...])"
עם מחלקות תווים בסוגריים בפנים ("$pat = qr/(?[ [a] ])/; /(?[ $pat ])/").
בעבר, הסוגריים היו מבלבלים את מנתח הביטויים הרגולריים.

· הודעת האזהרה "כמת בלתי צפוי בביטוי באורך אפס" עשויה להופיע
פעמיים החל ב-Perl v5.10 עבור ביטוי רגולרי המכיל גם החלפות
(למשל, "a|b") מפעיל את האופטימיזציה של הניסיון.

· Perl v5.18 הציג בטעות באג לפיו אינטרפולציה מעורבת למעלה ולמטה-
מחרוזות UTF-8 מדורגות ב-Regex עלולות לגרום ל-UTF-8 פגום בתבנית:
במיוחד אם תו משודרג לאחור בטווח "\x80..\xff" אחרי UTF-8
מחרוזת, למשל

utf8::upgrade( my $u = "\x{e5}");
utf8::downgrade(my $d = "\x{e5}");
/$u$d/

[RT #118297]

· בביטויים רגולריים המכילים מספר בלוקי קוד, הערכים של $1, $2 וכו',
שהוגדר על ידי קריאות ביטוי רגיל מקוננות ידלפו מבלוק אחד למשנהו. עַכשָׁיו
משתנים אלה מתייחסים תמיד לביטוי הרגולרי החיצוני בתחילת an
בלוק מוטבע [perl #117917].

· "/$qr/p" נשבר ב-Perl 5.18.0; התעלמו מהדגל "/p". זה תוקן.
[perl #118213]

· החל ב-Perl 5.18.0, מבנה כמו "/[#](?{})/x" יקבל את ה-"#" שלו בצורה שגויה
מתפרש כהערה. בלוק הקוד ידלג, לא ינותח. זה היה
תוקן.

· החל ב-Perl 5.001, לביטוי רגולרי כמו "/[#$a]/x" או "/[#]$a/x" יהיה
ה-"#" שלו מתפרש באופן שגוי כהערה, כך שהמשתנה לא יבצע אינטרפולציה.
זה תוקן. [perl #45667]

· Perl 5.18.0 הפך בטעות לביטויים רגולריים מורחקים ("${ qr// }") כ-false כמו
בוליאנים. זה תוקן.

· השימוש ב"\G" בביטויים רגולריים, שבהם הוא לא בתחילת התבנית, הוא
עכשיו קצת פחות באגי (למרות שזה עדיין קצת בעייתי).

· היכן ביטוי רגולרי כלל בלוקי קוד ("/(?{...})/"), והיכן השימוש ב
עומס יתר מתמשך הפעיל הידור מחדש של בלוק הקוד, השני
האוסף לא ראה את היקפו המילוני החיצוני. זו הייתה רגרסיה ב-Perl 5.18.0.

· מיקום המחרוזת שנקבע על ידי "pos" יכול להשתנות אם המחרוזת תשנה ייצוג
פנימי אל או מ-utf8. זה יכול לקרות, למשל, עם הפניות לאובייקטים עם
עומס יתר על המיתרים.

· נטילת הפניות לערכי ההחזר של שתי קריאות "pos" עם אותו ארגומנט, ו
ואז הקצאת הפניה לאחד ו"undef" לאחר, עלולה לגרום להצהרה
כשלים או דליפות זיכרון.

· אלמנטים של @- ו-@+ מתעדכנים כעת כהלכה כאשר הם מתייחסים ללכידות לא קיימות.
בעבר, אלמנט עם הפניה ("$ref = \$-[1]") יכול להתייחס להתאמה שגויה
לאחר המשחקים הבאים.

· הקוד שמנתח הפניות חוזרות של ביטויים regex (או חוזרים/אוקטלים לא ברורים) כגון \123 עשה
פשוט atoi (), שיכול לעוף לערכים שליליים על מחרוזות ספרות ארוכות ו
לגרום לתקלות פילוח. זה תוקן כעת. [perl #119505]

· הקצאת typeglob אחר ל-"*^R" כבר לא הופכת את מנוע הביטוי הרגולרי
התרסקות.

· בריחה של הביטוי הרגולרי "\N", כאשר משתמשים בו ללא הפלטה המתולתלת (להתכוון
"[^\n]"), התעלם מה-"*" הבא אם אחריו רווח לבן מתחת ל-/x. היה לו
זה היה ככה מאז ש-"\N" שפירושו "[^\n]" הוצג ב-5.12.0.

· "s///", "tr///" ו-"y///" פועלים כעת כאשר תו רחב משמש כמפריד.
[perl #120463]

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

· כאשר הפניה להפניה לאובייקט עמוס הוחזרה מרגיל
ביטוי "(??{...})" בלוק קוד, יתכן שהפנייה מרומזת שגויה תתרחש
אם ההפניה הפנימית הוחזרה על ידי בלוק קוד קודם לכן.

· משתנה קשור המוחזר מ-"(??{...})" רואה את הערכים הפנימיים של משתני התאמה
(כלומר, $1 וכו' מכל התאמות בתוך הבלוק) בשיטת ה-FETCH שלו. זה היה
לא המקרה אם הפניה לאובייקט עמוס יתר על המידה הייתה הדבר האחרון שהוקצה ל-
משתנה קשור. במקום זאת, משתני ההתאמה התייחסו לדפוס החיצוני במהלך
שיחת FETCH.

· תקן הכתמה בלתי צפויה באמצעות ביטוי רגיל באמצעות מיקום. בעבר, בתנאים מסוימים,
השימוש במחלקות אופי עלול לגרום להכתמה כשלא צריך. דמות כלשהי
השיעורים תלויים מקומיים, אבל לפני התיקון הזה, לפעמים התרחשה הכתמה
אפילו עבור מחלקות דמות שאינן תלויות במקום. [perl #120675]

· בתנאים מסוימים, פרל יזרוק שגיאה אם ​​ב-look-behind assertion ב-a
regexp, הטענה התייחסה לתת-דפוס בעל שם, והתלוננה שהמבט מאחור היה
משתנה כשלא היה. זה תוקן. [perl #120600], [perl #120618]. ה
התיקון הנוכחי עשוי להשתפר בעתיד.

· $^R לא היה זמין מחוץ לביטוי הרגולרי שאתחול אותו. [פרל
#121070]

· סט גדול של תיקונים ושחזורים עבור re_intuit_start() מוזג, נקודות השיא
הם:

· תוקן פאניקה בעת הידור הביטוי הרגולרי "/\x{100}[xy]\x{100}{2}/".

· תוקן רגרסיה של ביצועים בעת ביצוע התאמת דפוס גלובלי נגד א
מחרוזת UTF-8. [perl #120692]

· תוקן בעיית ביצועים נוספת שבה התאמת ביטוי רגולרי כמו
"/ab.{1,2}x/" כנגד מחרוזת UTF-8 ארוכה יחשב בייט שלא לצורך
קיזוז עבור חלק גדול מהמחרוזת. [perl #120692]

· תיקן שגיאת יישור בעת קומפילציה של ביטויים רגולריים כאשר נבנה עם GCC ב-HP-
UX 64 סיביות.

· בפלטפורמות של 64 סיביות ניתן כעת להגדיר "pos" לערך גבוה מ-2**31-1. [פרל
#72766]

פרל 5 Debugger ו -d
· תוקנה פקודת ה-"man" של המאתר. זה היה שבור במהדורת v5.18.0. ה
הפקודה "man" מכונתה לשמות "doc" ו- "perldoc" - כולן פועלות כעת שוב.

· @_ מוצג כעת כראוי במפרק הבאגים, ומתקן רגרסיה שהוכנסה ל
מאתר הבאגים של v5.18.0. [RT #118169]

· תחת בנייה של העתקה על כתיבה (ברירת המחדל החל מ-5.20.0) "${'_<-e'}[0]" כבר לא מקבל
מעוותת. זוהי שורת הקלט הראשונה שנשמרה לשימוש של מאתר הבאגים עבור one-liners
[perl #118627].

· בבנייה ללא שרשור, הגדרת "${"_
גורם ל-"__FILE__" וכמה הודעות שגיאה לייצר מחרוזת פגומה, ולא עוד
מונע מהוראות "#line" ב-string evals לספק את שורות המקור ל-
מנפה. בניית שרשורים לא הושפעה.

· החל מ-Perl 5.12, מספרי השורות היו מושבתים באחד אם -d נעשה שימוש במתג ב-
#! קַו. עכשיו הם צודקים.

· "*DB::DB = sub {} אם 0" כבר לא מונע ממצב ניפוי הבאגים של Perl למצוא את "DB::DB"
תת שהוכרזו לאחר מכן.

· "%{'_<...'}" גיבוב מגדיר כעת נקודות הפסקה ב-"@{'_<...'}" המקביל במקום
לאיזה מערך @DB::dbline הוא כינוי. [perl #119799]

· התקשר ל-set-magic בעת הגדרת $DB::sub. [perl #121255]

· הפקודה "n" של מאתר הבאגים מכבדת כעת תת-שגרות lvalue ועוברת עליהן [perl
#118839].

לֵקסִיקָלִי שגרת משנה
· קבועים לקסיקליים ("my sub a() { 42 }") אינם מתרסקים עוד כשהם מוטבעים.

· אבות טיפוס של פרמטרים המחוברים לתתי שגרות מילוניות זוכים כעת לכבוד בעת הידור
שיחות משנה ללא סוגריים. בעבר, אבות הטיפוס זכו לכבוד רק עבור
שיחות עם סוגריים. [RT #116735]

· שגיאות תחביר בתתי שגרות מילוניות בשילוב עם קריאות לאותן תתי שגרות
כבר לא גורם לקריסות בזמן ההידור.

· אזהרות רקורסיות עמוקות כבר לא קורסות תת-שגרות מילוניות. [RT #118521]

· הבדיקה של כניסת המשנה של dtrace עובדת כעת עם שמות משנה לקסיקליים, במקום לקרוס [perl
#118305].

· ביטול הגדרה של תת-שגרה מילונית בלתי ניתנת לריבוע ("my sub foo() { 42 } undef &foo")
לגרום להתרסקות אם אזהרות הופעלו.

· תת מילוני לא מוגדר המשמש כשיטה בירושה כבר לא קורס.

· הנוכחות של משנה מילונית בשם "CORE" כבר לא עוצרת את הקידומת CORE:: מ
עובד.

הכל אחר
· קוד הקצאת OP מחזיר כעת זיכרון מיושר נכון בכל המקרים עבור "struct
pmop". בעבר זה יכול היה להחזיר זיכרון מיושר רק לגבול של 4 בתים, שהוא
לא נכון ל-threads לבנות עם 64 סיביות IV בכמה פלטפורמות של 32 סיביות. במיוחד,
זה גרם לבנייה להיכשל לחלוטין ב-sparc GNU/Linux. [RT #118055]

· הערכת hashes גדולים בהקשר סקלרי היא כעת הרבה יותר מהירה, כמו מספר השימושים
שרשראות ב-hash נשמרות כעת במטמון עבור Hash גדולים יותר. חשישים קטנים יותר ממשיכים שלא
אחסן אותו וחשב אותו בעת הצורך, מכיוון שזה חוסך IV אחד. זה יהיה 1 IV
תקורה לכל אובייקט שנבנה מ-hash. [RT #114576]

· Perl v5.16 הציג בטעות באג לפיו קריאות ל-XSUBs שלא היו גלויות
בזמן הקומפילציה התייחסו כאל-ערכים וניתן היה להקצות אליהם, גם כאשר ה-
תת שגרת לא הייתה תת lvalue. זה תוקן. [RT #117947]

· ב-Perl v5.18.0 dualvars שהיו להם מחרוזת ריקה לחלק המחרוזת אבל לא אפס
מספר עבור חלק המספר שמתחיל להיות מטופל כאמת. בגרסאות קודמות הם
טופלו כשקריים, ייצוג המחרוזת קיבל עדיפות. הישן
ההתנהגות שוחזרה. [RT #118159]

· מאז Perl v5.12, הטבעה של קבועים שעוקפים מילות מפתח מובנות של אותן מילות מפתח
השם הטיל נגד "שימוש בתתי", מה שגרם לאזכורים הבאים של הקבוע לשימוש
במקום זאת, מילת המפתח המובנית. זה תוקן.

· האזהרה שהופקה על ידי "-l $handle" חלה כעת על מקרי IO וגלובסים, לא רק על
שופט גלוב. אזהרה זו גם כעת נקייה ב-UTF8. [RT #117595]

· "מחק $ENV{nonexistent_env_var} מקומי" כבר לא דולף זיכרון.

· "מיין" ו-"דרוש" ואחריו מילת מפתח עם קידומת "CORE::" תתייחס אליה כעת כאל
מילת מפתח, ולא כתת שגרה או שם מודול. [RT #24482]

· באמצעות חידות מסוימות, ניתן לגרום לחבילה הנוכחית להשתחרר.
מפעילים מסוימים ("ברך", "אפס", "פתח", "התעשת") לא יכלו להתמודד והתרסקו.
הם נעשו עמידים יותר. [RT #117941]

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

· "./Configure -de -Dusevendorprefix" לא הוגדר כברירת מחדל. [RT #64126]

· אזהרת "הצהרה שלא סביר שתושג" הייתה רשומה ב-perldiag כ-an
אזהרת קטגוריית "exec", אך הופעלה והושבתה על ידי קטגוריית "תחביר". עַל
מצד שני, קטגוריית "המנהלים" שלטה בקטלניות שלה. זה עכשיו לגמרי
מטופלת על ידי קטגוריית "exec".

· אזהרת "רשימת ההחלפה ארוכה יותר כי רשימת החיפוש" עבור "tr///" ו-"y///" no
ארוכה יותר מתרחשת בנוכחות הדגל "/c". [RT #118047]

· המחרוזת של NVs אינה מאוחסנת במטמון כך שהמקום המילוני שולט
מחרוזת של הנקודה העשרונית. [perl #108378] [perl #115800]

· היו מספר תיקונים הקשורים לטיפול של פרל במקומונים. perl #38193 היה
המתואר לעיל ב"שינויים פנימיים". קבוע גם #118197, שבו הרדיוס
תו (נקודה עשרונית) היה צריך להיות תו ASCII (שלא עובד עבור חלק
שפות לא מערביות); ו-#115808, שבו "POSIX::setlocale()" בכשל הוחזר
"undef" שלא התריע על אי הגדרה גם אם היו אזהרות אלו
מאופשר.

· קומפילציה של אופרטור "פיצול" שהארגומנט השלישי שלו הוא קבוע בשם הערכה ל-0
כבר לא גורם לשינוי ערך הקבוע.

· קבוע בשם המשמש כארגומנט השני ל"אינדקס" כבר לא נכפה ל-a
מחרוזת אם היא הפניה, ביטוי רגולרי, דואלבר וכו'.

· קבוע בשם שמעריך את הערך הלא מוגדר המשמש כארגומנט השני ל
"אינדקס" כבר לא מייצר אזהרות "לא אתחולות" בזמן ההידור. זה עדיין יהיה
לייצר אותם בזמן ריצה.

· כאשר סקלאר הוחזר מתת-שגרה ב-@INC, הסקלר אליו מתייחסים היה
הומר בצורה קסומה ל-IO thingy, אולי גורם לשגיאות "עותק מוזר" אם
הסקלר הזה המשיך לשמש במקומות אחרים. כעת Perl משתמשת בעותק פנימי של
סקלרי במקום.

· שימושים מסוימים באופרטור "מיין" מותאמים לשינוי מערך במקום, כגון
"@a = מיון @a". במהלך המיון, המערך נעשה לקריאה בלבד. אם בלוק מיון
במקרה למות, אז המערך נשאר לקריאה בלבד גם מחוץ ל"מיון". זֶה
תוקן.

· $a ו-$b בתוך בלוק מיון מכונים לארגומנטים בפועל כדי "למיין", כך שהם
ניתן לשנות באמצעות שני משתנים אלה. זה לא תמיד עבד, למשל, עבור
lvalue subs ו-$#ary, וכנראה אופרטורים רבים אחרים. זה עובד עכשיו.

· הארגומנטים ל"מיין" נמצאים כעת כולם בהקשר של רשימה. אם ה"מיון" עצמו נקרא
בהקשר ריק או סקלרי, אם כן כמה, אך לא כל הטיעונים בעבר היו בטלים
או הקשר סקלרי.

· אבות-טיפוס של תת-שגרה עם תווי Unicode מעל U+00FF הושחתו במהלך
שיבוט סגירה. זה יקרה עם תתי שגרות שנסגרות על משתנים לקסיקליים
מוצהר בחוץ, ועם משנה מילוני.

· "UNIVERSAL::can" מתייחס כעת לארגומנט הראשון שלו באותו אופן שבו מתנהלות קריאות למתודה:
טיפוגלובים והפניות גלוב עם חריצי IO לא ריקים מתייחסים כאל ידיות, ו
מחרוזות מטופלות כ-filhandles, ולא חבילות, אם ידית עם שם זה
קיים [perl #113932].

· השיטה קוראת ל-typeglobs (למשל, "*ARGV->getline") המשמשים למחרוזת ה-typeglob ו-
ואז לחפש את זה שוב. בשילוב עם שינויים ב-Perl 5.18.0, זה אפשר "*foo->bar"
לקרוא לשיטות בחבילת "foo" (כמו "foo->bar"). במקרים מסוימים זה יכול לגרום
השיטה להיקרא על הידית הלא נכונה. כעת מתייחסים לארגומנט typeglob כאל א
handle (בדיוק כמו "(\*foo)->bar"), או, אם חריץ ה-IO שלו ריק, הועלתה שגיאה.

· הקצאת vstring למשתנה קשור או לארגומנט תת שגרתי בכינוי a
רכיב hash או מערך שאינו קיים פועל כעת, מבלי לשטח את ה-vstring ל-a
מחרוזת רגילה.

· "pos", "קשור", "קשור" ו-"נתיר" לא פעלו כראוי על ארגומנטים של תת-שגרה בכינויה
ל-hash ורכיבי מערך שאינם קיימים [perl #77814, #27010].

· אופרטור החץ השמן "=>" יכול כעת לצטט מילות מפתח מובנות גם אם זה מתרחש ב-
השורה הבאה, מה שהופך אותה לעקבית עם האופן שבו היא מתייחסת למילים חשופות אחרות.

· החייאה אוטומטית של תאב שגרה באמצעות "\&$glob" התחילה לגרום לקריסות ב-Perl 5.18.0
אם $glob היה רק ​​עותק של גלוב אמיתי, כלומר, סקלאר שהיה לו גלוב
מוקצה לו. זה תוקן. [perl #119051]

· Perl נהגה להדליף פרט יישום בכל הנוגע להתייחסות להחזר
ערכים של מפעילים מסוימים. "for ($a+$b) { warn \$_; warn \$_ }" משמש להצגת שניים
כתובות זיכרון שונות, כי האופרטור "\" העתיק את המשתנה. תַחַת
בניית הברגה, זה יקרה גם עבור קבועים ("ל(1) { ... }"). זה היה
תוקן. [perl #21979, #78194, #89188, #109746, #114838, #115388]

· מפעיל הטווח ".." החזיר את אותם סקלרים שניתנים לשינוי בכל שיחה,
אלא אם כן זה היה הדבר היחיד בכותרת לולאה "foreach". המשמעות היא ששינויים ל
ערכים בתוך הרשימה המוחזרת יהיו גלויים בפעם הבאה שהאופרטור היה
יצא לפועל. [perl #3105]

· קיפול מתמיד והטבעת תת שגרה כבר לא גורמים לפעולות שיעשו זאת
בדרך כלל מחזירים סקלרים חדשים הניתנים לשינוי כדי להחזיר במקום ערכי קריאה בלבד.

· סגירות של הטופס "sub () { $some_variable }" אינם מוטבעים עוד, מה שגורם
שינויים במשתנה שיתעלמו ממנו על ידי המתקשרים של תת-השגרה. [perl #79908]

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

· "__PACKAGE__" וקבועים המחזירים שם חבילה או מפתח hash הם כעת באופן עקבי
לקריאה בלבד. במהדורות קודמות שונות של Perl, הם הפכו ניתנים לשינוי בוודאות
בנסיבות.

· הפעלת אזהרות "בשימוש פעם אחת" אינה גורמת עוד לקריסות במעגלי מחסן שנוצרו
בזמן הידור ("*Foo::Bar::Foo:: = *Foo::").

· קבועי Undef המשמשים במפתחות hash ("השתמש בקבוע u => undef; $h{+u}") כבר לא
לייצר אזהרות "לא אתחולות" בזמן ההידור.

· שינוי יעד החלפה בתוך החלפת ההחלפה אינו גורם עוד
קריסות.

· ההצהרה הראשונה בתוך eval מחרוזת משמשת לשימוש בהגדרת פרגמה שגויה
לפעמים במהלך קיפול מתמיד. "eval 'uc chr 0xe0'" יבחר באקראי בין
סמנטיקה של Unicode, בייט ומקום. זה תוקן.

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

· הפונקציה "SvPVbyte" XS תוקנה לעבודה עם סקלרים קשורים חוזרים
משהו אחר מלבד מחרוזת. זה נהג להחזיר utf8 באותם מקרים שבהם "SvPV"
היה.

· Perl 5.18.0 גרם בטעות ל-"--" ו-"++" לקרוס על רגיל מנותק
ביטויים, ועצרו את "++" מהשטחת vstrings.

· "ברך" כבר לא מת עם "אי אפשר לברך ערך אי-התייחסות" אם הטיעון הראשון שלו הוא
התייחסות קשורה.

· "איפוס" עם ארגומנט כבר לא מדלג על סקלרים של העתקה על כתיבה, ביטויים רגולריים,
עותקי typeglob ו-vstrings. כמו כן, כאשר נתקלים בערכים אלה או לקריאה בלבד, זה
כבר לא מדלג על מערך או hash עם אותו שם.

· "reset" עם ארגומנט מדלג כעת על סקלרים בכינויה ל-typeglobs ("עבור $z (*foo) {
אפס את "z" }"). בעבר זה היה משחית את הזיכרון או קורס.

· "ucfirst" ו-"lcfirst" לא כיבדו את פרגמת הבייטים. זו הייתה רגרסיה
מ-Perl 5.12. [perl #117355]

· שינויים ב-"UNIVERSAL::DESTROY" מעדכנים כעת מטמונים של DESTROY בכל המחלקות, במקום
מה שגורם למחלקות שכבר הושמדו אובייקטים להמשיך להשתמש בסאב הישן.
זו הייתה רגרסיה בפרל 5.18. [perl #114864]

· כל המופעים החיוביים-שגויים הידועים של אזהרת הביטול "שימוש חסר תועלת ב'\';
לא נמלט מהתו '%c'", שנוספו ב-Perl 5.18.0, הוסרו. [perl
#119101]

· הערך של $^E נשמר כעת בין מטפלי אותות ב-Windows. [perl #85104]

· Handle file למילוני (כמו ב"פתח את $fh שלי...") מקבל בדרך כלל שם המבוסס על
החבילה הנוכחית ושם המשתנה, למשל "main::$fh". תחת רקורסיה, ה
filehandle איבד את החלק "$fh" של השם. זה תוקן.

· ערכים לא מאותחלים המוחזרים על ידי XSUBs אינם פטורים עוד מחוסר אתחול
אזהרות. [perl #118693]

· "elsif ("")" כבר לא מייצר בטעות אזהרה על הקשר ריק. [פרל
#118753]

· העברת "undef" לשגרת משנה גורמת כעת ל-@_ להכיל את אותו קריאה בלבד לא מוגדר
סקלר ש"undef" מחזיר. יתר על כן, "קיים $_[0]" יחזיר כעת true if
"undef" היה הטיעון הראשון. [perl #7508, #109726]

· העברת אלמנט מערך לא קיים לתת-שגרה אינה גורמת לו לרוב להחיות חיים
אלא אם כן תת-השגרה משנה את הטיעון שלה. זה לא עבד כמו שצריך עם
מדדים שליליים ועם אלמנטים לא קיימים בתוך המערך. האלמנט היה
להחיות מיד. החייאה המושהית הוארכה לעבודה
הָהֵן. [perl #118691]

· הקצאת הפניות או גלובס לסקלאר שהוחזר על ידי $#foo לאחר שמערך @foo
שוחרר כבר לא גורם לכשלים בהצהרה על בניית באגים ודליפות זיכרון
בנייה רגילה.

· בפלטפורמות של 64 סיביות, טווחים גדולים כמו 1..1000000000000 כבר לא קורסים, אלא אוכלים
את כל הזיכרון שלך במקום. [perl #119161]

· "__DATA__" כעת מכניס את ידית "DATA" בחבילה הנכונה, גם אם הנוכחית
שם החבילה שונה באמצעות הקצאת גלוב.

· כאשר "למות", "אחרון", "הבא", "לעשות מחדש", "גוטו" ו"יציאה" לפרוק את הסקופ, זה אפשרי
עבור "DESTROY" באופן רקורסיבי לקרוא לשגרת משנה או פורמט שנמצא כעת
יצא. במקרה כזה, לפעמים המשתנים המילוניים בתוך המשנה היו מתחילים
בעלי ערכים מהקריאה החיצונית, במקום להיות לא מוגדרים כפי שהם צריכים. זֶה
תוקן. [perl #119311]

· ${^MPEN} אינו מטופל עוד כמילה נרדפת ל-${^MATCH}.

· פרל מנסה כעת קצת יותר להחזיר את מספר השורה הנכון ב"(מתקשר)[2]".
[perl #115768]

· מספרי שורות בתוך אופרטורים דמויי ציטוט מרובי שורות מדווחים כעת כהלכה. [פרל
#3643]

· הנחיות "#line" בתוך קוד המוטבע באופרטורים דמויי ציטוטים מכובדות כעת.

· מספרי השורות נכונים כעת בתוך ה-her-doc השני כאשר שני סמני here-doc
להתרחש על אותו קו.

· אופטימיזציה ב-Perl 5.18 עשתה הנחות שגויות שגרמה לאינטראקציה גרועה עם
מודול Devel::CallParser CPAN. אם המודול נטען אז משתנים לקסיקליים
המוצהר בהצהרות נפרדות לאחר רשימת "שלי(...)" עלול להיכשל בניקוי
יציאת היקף.

· קריאות &xsub ו-"goto &xsub" מאפשרות כעת לתת-השגרה הנקראת להחיות רכיבים של
@_.

· &xsub ו-"goto &xsub" אינם קורסים עוד אם *_ לא הוגדר ואין לו ערך ARRAY
(כלומר @_ לא קיים).

· &xsub ו-"goto &xsub" עובדים כעת עם @_ קשור.

· מזהים ארוכים מדי אינם גורמים עוד לגלישה של מאגר (ולקריסה). הם התחילו
עושה זאת בפרל 5.18.

· האזהרה "הערך הסקלרי @hash{foo} טוב יותר שנכתב בתור $hash{foo}" מייצרת כעת הרבה
פחות תוצאות חיוביות שגויות. בפרט, @hash{+function_returning_a_list} ו-@hash{ qw
"foo bar baz" } לא להזהיר יותר. אותו דבר חל על פרוסות מערך. [perl #28380,
#114024]

· "$! = EINVAL; waitpid(0, WNOHANG);" לא נכנס יותר ללולאה אינסופית פנימית.
[perl #85228]

· תוקנה תקלת פילוח אפשרית בשכפול filehandle.

· תת שגרה ב-@INC יכולה להחזיר הפניה לסקלר המכיל את האותיות
תוכן הקובץ. עם זאת, הסקלר הזה שוחרר בטרם עת אם לא התייחסו אליו
במקום אחר, נותן תוצאות אקראיות.

· "אחרון" כבר לא מחזיר ערכים שאותה הצהרה צברה עד כה, מתקן
בין היתר הבאג ותיק ש-"push @a, last" ינסה לחזור
ה-@a, מעתיק אותו כמו סקלאר בתהליך וכתוצאה מכך השגיאה, "מוזר
עותק של ARRAY באחרונה." [perl #3112]

· במקרים מסוימים, סגירת תיקי ידיות שנפתחו לצנרת לתהליך או ממנו, שהיה
שוכפל לידית אחיזה רגילה, יקרא ל-perl waitpid wrapper הפנימי
עם פיד של אפס. עם התיקון עבור [perl #85228] אפס פיד זה הועבר אל
"waitpid", אולי חוסם את התהליך. ההמתנה הזו לתהליך אפס כבר לא
מתרחשת. [perl #119893]

· "בחר" משמש כדי להתעלם מקסם בארגומנט הרביעי (פסק זמן), מה שמוביל לאפקטים
כגון "בחר" חסימה ללא הגבלת זמן ולא את זמן השינה הצפוי. יש לזה
כעת תוקן. [perl #120102]

· שם הכיתה ב-"for my class $foo" מנותח כעת כהלכה. במקרה של ה
התו השני של שם הכיתה ואחריו ספרה (למשל 'a1b') שהייתה לו בעבר
תן את השגיאה "חסר $ במשתנה לולאה". [perl #120112]

· Perl 5.18.0 פסלה בטעות את "-bareword" תחת "השתמש בקפדנות" ו"השתמש במספר שלם".
זה תוקן. [perl #120288]

· "-a" בתחילת שורה (או מקף עם כל אות בודדת שאינה בדיקת קבצים
אופרטור) אינו מייצר עוד 'שימוש ב-"-a" שגוי ללא סוגריים הוא
אזהרה מעורפלת. [perl #120288]

· הקשר Lvalue מופץ כעת כראוי לבלוקים חשופים ולבלוקים "אם" ו-"אחר".
בתתי שגרות lvalue. בעבר, מערכים ו-hash היו לפעמים שגויים
מושטח כאשר מוחזר בהקשר של רשימת lvalue, או שגיאות "עותק מוזר" עלולות להתרחש.
[perl #119797]

· הקשר Lvalue מופץ כעת לענפים של "||" ו-"&&" (ושלהם
מקבילות אלפביתיות, "או" ו-"ו"). משמעות הדבר היא "foreach (pos $x || pos $y)
{...}" מאפשר כעת לשנות את "pos" באמצעות $_.

· "stat" ו-"readline" זוכרים את הידית האחרונה שבה השתמשו; הראשון עבור "_" המיוחד
filehandle, האחרון עבור "${^LAST_FH}". "eval "*foo if 0"" שבו *foo היה האחרון
ידית המועברת ל-"stat" או "readline" עלולה לגרום לשכוח את הידית הזו אם
הידית עדיין לא נפתחה. זה תוקן.

· מקרים שונים של "מחק $::{a}", "מחק $::{ENV}" וכו' שגרמו לקריסה
תוקן. [perl #54044]

· הגדרת $! EACCESS לפני הקריאה ל"דרוש" עשויה להשפיע על ההתנהגות של "דרוש".
זה תוקן.

· הודעת האזהרה "אי אפשר להשתמש ב-\1 למשמעות של $1 בביטוי" מופיעה כעת רק ב-
חלק ימני (החלפה) של תחליף. בעבר זה יכול היה לקרות בקוד
מוטבע בצד שמאל, או בכל אופרטור אחר דמוי ציטוט.

· ברכה לתוך הפניה ("ברך $thisref, $thatref") נאסרה מזמן, אבל
סקלרים קסומים עבור השני כמו $/ ואלו הקשורים היו פטורים. הם כבר לא
הם. [perl #119809]

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

· "$x->{key}" שבו $x הוכרז כ-"my Class $x" כבר לא קורס אם
בדל שגרת המשנה Class::FIELDS הוכרז.

· @$obj{'key'} ו-"${$obj}{key}" היו פטורים בעבר מבדיקת שדות בזמן הידור
("אין שדה מחלקה כזה"; ראה שדות) אבל כבר לא.

· אלמנט מערך לא קיים עם אינדקס גדול מועבר לתת-שגרה הקושרת את
מערך ולאחר מכן מנסה לגשת לאלמנט כבר לא גורם לקריסה.

· הכרזה על בדל תתי שגרה בשם NEGATIVE_INDICES כבר לא יוצר מערך שלילי
המדדים קורסים כאשר החבילה הנוכחית היא מחלקת מערך קשורה.

· הכרזה על בדל תתי שגרה "דרוש", "גלוב" או "עשה" בחבילת CORE::GLOBAL::
כבר לא גורם להידור של שיחות לפונקציות המתאימות לקרוס.

· כינוי CORE::GLOBAL:: פונקציות לקבועים הפסיקו לעבוד ב-Perl 5.10 אבל יש
כעת תוקן.

· כאשר "`...`" או "qx/.../" מתקשרים לעקיפה של "readpipe", אינטרפולציה כפולה מרשושית
עכשיו קורה, כפי שקורה כאשר אין דריסה. בעבר, נוכחותו של א
ביטול יגרום לאופרטורים דמויי מרכאות אלה לפעול כמו "q{}", תוך דיכוי
שִׁרבּוּב. [perl #115330]

· "<<<`...`" here-docs (עם סימנים אחוריים כמפרידים) קוראים כעת לעקיפות "readpipe".
[perl #119827]

· "&CORE::exit()" ו-"&CORE::die()" מכבדים כעת את הרמזים של vmsish.

· ביטול הגדרה של גלוב שמפעיל שיטת DESTROY המבטלת הגדרה של אותו גלוב
בטוח. זה נהג להפיק אזהרות "ניסיון לשחרר מצביע גלוב ללא התייחסות" ו
דליפת זיכרון.

· אם הגדרה מחדש של תת-שגרה ("eval 'sub foo{}'" או "newXS" עבור קוד XS) מפעילה
שיטת DESTROY על המשנה המוגדרת מחדש, ושיטה זו מקצה א
תת שגרת לאותו משבצת ("*foo = תת {}"), $_[0] כבר לא מצביע על
סקלרית משוחררת. כעת ה-DESTROY מתעכב עד שתת-השגרה החדשה הותקנה.

· ב-Windows, perl כבר לא מתקשר CloseHandle () על ידית שקע. זה עושה
איתור באגים קל יותר ב-Windows על ידי הסרת חריגים מסוימים לא רלוונטיים של ידית גישה רעה. זה
מתקן גם מצב מירוץ שגרם לפונקציות socket להיכשל באופן אקראי בתהליך Perl
עם שרשורי מערכת הפעלה מרובים, וכישלונות בדיקה אפשריים ב
dist/IO/t/cachepropagate-tcp.t. [perl #120091/118059]

· פורמטים הכוללים מחרוזות מקודדות UTF-8, או וריאציות מוזרות כמו קשרים, עומס יתר או
שופטים מסודרים (ובפרלים האחרונים, NOK vars טהור) בדרך כלל יעשו את הרע
דבר בפורמטים כאשר ה-var מטופל כמחרוזת וקצוץ שוב ושוב, כמו ב
"^<<<~~" וכדומה. זה כבר נפתר. [פרל
#33832/45325/113868/119847/119849/119851]

· "semctl(..., SETVAL, ...)" יקבע את הסמפור ל-32 הסיביות העליונות של הקובץ שסופק
מספר שלם במקום 32 הסיביות התחתונות במערכות גדולות 64 סיביות. [perl #120635]

· "readdir()" מגדיר כעת רק $! על טעות. $! לא מוגדר יותר ל"EBADF" כאשר אז
סיום "undef" נקרא מהספרייה אלא אם כן קריאת המערכת מגדירה $!. [פרל
#118651]

· &CORE::glob כבר לא גורם להתרסקות לסירוגין עקב קבלת המחסנית של Perl
מושחת. [perl #119993]

· "פתוח" עם שכבות שטוענות מודולים (למשל, "<:encoding(utf8)") כבר לא מריץ את
סכנת קריסה עקב שחיתות מחסנית.

· Perl 5.18 שבר את הטעינה האוטומטית באמצעות קריאות שיטת "->SUPER::foo" על ידי חיפוש אחר AUTOLOAD
מהחבילה הנוכחית ולא ממעמד העל של החבילה הנוכחית. זה היה
תוקן. [perl #120694]

· באג ותיק הגורם ל"עשה {} עד CONSTANT", כאשר הקבוע מחזיק אמת
ערך, כדי לקרוא זיכרון לא מוקצה נפתרה. זה היה קורה בדרך כלל לאחר מכן
שגיאת תחביר. בגרסאות קודמות של Perl הוא קרס לסירוגין. [perl #72406]

· תקן HP-UX $! כישלון. HP-UX strerror() מחזיר מחרוזת ריקה עבור שגיאה לא ידועה
קוד. זה גרם לטענה שנכשלה ב-buGGing builds. כעת במקום זאת, ה
מחרוזת שהחזירה עבור "$!" מכיל טקסט המציין שהקוד מיועד לשגיאה לא ידועה.

· רכיבים הקשורים בנפרד של @INC (כמו ב"קשור $INC[0]...") מטופלים כעת בצורה נכונה.
בעבר, האם סאב שהוחזר על ידי אלמנט קשור כזה יטופל כסאב
תלוי אם התרחש FETCH קודם לכן.

· "getc" על ידית אחיזה בגודל בתים לאחר שימוש באותו אופרטור "getc" ב-utf8
ידית המשמשת להתייחסות לבייטים כ-utf8, וכתוצאה מכך התנהגות לא יציבה (למשל, שגויה
אזהרות UTF-8).

· "{" ראשוני בתחילת שורת ארגומנט פורמט התפרש תמיד כ
תחילתו של בלוק לפני גרסה 5.18. ב-Perl v5.18, התחילו להתייחס אליו כאל
אסימון מעורפל. המנתח היה מנחש אם זה אמור להיות אנונימי
בנאי hash או בלוק המבוסס על התוכן. עכשיו יש להתנהגות הקודמת
שוחזרו. [perl #119973]

· ב-Perl v5.18 "undef *_; goto &sub" ו-"local *_; goto &sub" התחילו לקרוס. זֶה
תוקן. [perl #119949]

· התקפות אחוריות (" `` " או " qx// ") בשילוב עם שרשורים מרובים ב-Win32 עלולים לגרום
פלט שנשלח ל-stdout ב-thread אחד שנלכד על-ידי סימנים אחוריים של פקודה חיצונית
בחוט אחר.

זה יכול להתרחש גם עבור תהליכים מזולגים פסאודו, שכן הפסאודו-מזלג של Win32 הוא
מיושם במונחים של שרשורים. [perl #77672]

· "פתח $fh, ">+", undef" כבר לא מדליף זיכרון כאשר TMPDIR מוגדר אלא מצביע על
ספרייה שבה לא ניתן ליצור קובץ זמני. [perl #120951]

· " עבור ( $h{k} || '' ) " כבר לא מעורר אוטומטית את $h{k}. [perl #120374]

· במחשבי Windows, Perl מחקה כעת את השימוש ב-POSIX בסביבה עבור מיקום
אִתחוּל. בעבר התעלמו מהסביבה. ראה "סביבה" ב
perllocale.

· תיקן התרסקות בעת השמדת GLOB עם הפניה עצמית. [perl #121242]

ידוע בעיות


· ידוע כי IO::Socket נכשל במבחנים ב-AIX 5.3. יש תיקון
במעקב אחר הבקשות, #120835,
אשר עשוי להיות מיושם על מהדורות עתידיות.

· המודולים הבאים ידועים כבעלי כשלי בדיקה עם גרסה זו של Perl.
התיקונים הוגשו, אז אני מקווה שיהיו מהדורות חדשות בקרוב:

· נתונים::Structure::Util גרסה 0.15

· HTML::StripScripts גרסה 1.05

· רשימה::לאסוף גרסה 0.08.

ההספד


דיאנה רוזה, בת 27 מריו דה ז'נרו, הלכה למנוחתה הארוכה ב-10 במאי 2014, יחד עם
גמל קטיפה שהיא המשיכה לתלות על מסך המחשב שלה כל הזמן. היא הייתה נלהבת
האקר של פרל שאהב את השפה ואת הקהילה שלה, ושאף פעם לא החמיץ אירוע Rio.pm.
היא הייתה אמנית אמיתית, חובבת כתיבת קוד, שירת אריות וגרפיט
קירות. לעולם לא נשכח אותך.

גרג מקארול מת ב-28 באוגוסט 2013.

גרג היה ידוע מהרבה סיבות טובות. הוא היה אחד המארגנים של הראשון
YAPC::Europe, שהסתיים במכירה פומבית לא מתוכננת שבה הוא ניסה בטירוף
לגייס כסף נוסף כדי למנוע מהכנס הפסד. זה היה גרג שבטעות
הגיע לפגישה בלונדון באיחור של שבוע; כמה שנים מאוחר יותר הוא היה זה שמכר את
בחירת תאריך הפגישה הרשמי במכירה פומבית של YAPC::Europe, ובסופו של דבר מפוארת
מנהיג london.pm הוא זכה לרשת את הבלבול חסר הכבוד שהוא יצר.

תמיד מועיל, ידידותי ואופטימי בעליזות, אתה תחסר, אבל לעולם לא
ישכח.

תודות


Perl 5.20.0 מייצג כ-12 חודשים של פיתוח מאז Perl 5.18.0 ו
מכיל כ-470,000 שורות של שינויים על פני 2,900 קבצים מ-124 מחברים.

לא כולל קבצים שנוצרו אוטומטית, תיעוד וכלי שחרור, היו בערך
280,000 שורות של שינויים בקבצי 1,800 .pm, .t, .c ו-.h.

פרל ממשיכה לפרוח בעשור השלישי שלה הודות לקהילה תוססת של משתמשים
ומפתחים. ידוע שהאנשים הבאים תרמו את השיפורים ש
הפך לפרל 5.20.0:

אהרון קריין, אבהיג'יט מנון-סן, אביגיל, אביר ויקר, אלן חגי אלאווי, אלן חוריהאן,
אלכסנדר וורונוב, אלכסנדר צ'ורני, אנדי דאגרטי, אנו סיגל, אריסטו פגלציס,
ארתור אקסל 'fREW' שמידט, בראד גילברט, ברנדן בירד, בריאן צ'יילדס, בריאן פרייזר, בריאן
גוטרו, כריס 'BinGOs' וויליאמס, כריסטיאן מילור, קולין קוסקי, קרייג א. ברי, דאבריאן
'דייב' מרפי, דגפין אילמרי מנסאקר, דניאל דראגן, דארין מקברייד, דיוויד גולדן,
דיוויד לידביטר, דיוויד מיטשל, דיוויד ניקול, דיוויד שטיינברונר, דניס קארסמייקר,
דומיניק הארגריבס, אד אוויס, אריק בריין, אוון זקס, האב כריסוסטומוס, פלוריאן רגוויץ,
פרנסואה פראד, גאווין שלי, גדעון ישראל דסוזה, ג'יזל אאס, גרהם קנופ, ה.מרין
ברנד, Hauke ​​D, Heiko Eissfeldt, Hiroo Hayashi, Hojung Youn, James E Keenan, Jarkko
Hietaniemi, ג'רי ד. הדדן, ג'ס רובינסון, ג'סי לוהרס, יוהאן ורומן, ג'ון גרדינר
מאיירס, ג'ון גודייר, ג'ון פ. לינדרמן, ג'ון פיקויק, קפקא, קאנג-מין ליו, קארן
את'רידג', קארל וויליאמסון, קידי קים, קנט פרדריק, קווין דוסון, קווין פלקון, קווין
רייד, ליאון טימרמנס, לוקאס מאי, מארק סימפסון, מרסל גרינאואר, מרקו פירבום, מרקוס
הולנד-מוריץ, מארק ג'ייסון דומינוס, מרטין מקגראת', מתיו הורספול, מקס מיישיין, מייק
דוהרטי, מוריץ לנץ, נתן גלן, נתן טראפוזאנו, ניל באוורס, ניל וויליאמס,
ניקולס קלארק, נילס טיקייר, ניקו טיני, אוליבייה מנגה, אואין ג'י איינסוורת', פול גרין,
פול ג'ונסון, פיטר ג'ון אקלם, פיטר מרטיני, פיטר ראביטסון, פטר פיסאקס, פיליפ
בוליין, פיליפ גינטר, פיוטר רוזאציצקי, רפאל גרסיה-סוארס, רייני אורבן, ראובן
תומאס, ריקרדו סיגנס, רוסלן זקירוב, סרגיי אלכסייב, שירקאטה קנטרו, שלומי פיש,
סלבן רזיץ', סמיילרס, סטפן מולר, סטיב היי, סאליבן בק, תומאס סיבלי, טוביאס
לייך, טובי אינקסטר, טוקוהירו מטסונו, טום כריסטיאנסן, טום הוקינס, טוני קוק, ויקטור
אפימוב, ויקטור טורסקי, ולדימיר טימופייב, YAMASHINA Hio, איב אורטון, זפרם, זסבן
Ambrus, AEvar Arnfjoer` Bjarmason.

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

רבים מהשינויים הכלולים בגרסה זו מקורם במודולי CPAN הכלולים ב
הליבה של פרל. אנו אסירי תודה לכל קהילת ה-CPAN על שעזרה לפרל לפרוח.

לרשימה מלאה יותר של כל התורמים ההיסטוריים של פרל, עיין ב- מחברים
קובץ בהפצת המקור של Perl.

דווח באגס


אם אתה מוצא את מה שאתה חושב שהוא באג, תוכל לבדוק את המאמרים שפורסמו לאחרונה ב-
קבוצת הדיון comp.lang.perl.misc ומסד הנתונים של באגים של perl ב http://rt.perl.org/perlbug/ .
ייתכן שיהיה מידע גם ב http://www.perl.org/ , דף הבית של פרל.

אם אתה מאמין שיש לך באג שלא דווח, אנא הפעל את תוכנית perlbug הכלולה ב-
השחרור שלך. הקפד לקצץ את הבאג שלך למקרה מבחן זעיר אך מספיק. הבאג שלך
דוח, יחד עם הפלט של "perl -V", יישלח אל [מוגן בדוא"ל] להיות
נותח על ידי צוות העברת פרל.

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

השתמש ב-perl5200delta באופן מקוון באמצעות שירותי onworks.net


שרתים ותחנות עבודה בחינם

הורד אפליקציות Windows & Linux

  • 1
    autpass
    autpass
    AuthPass היא סיסמת קוד פתוח
    מנהל עם תמיכה עבור פופולרי ו
    Keepass מוכח (kdbx 3.x ו-kdbx 4.x ...
    הורד Authpass
  • 2
    זאביקס
    זאביקס
    Zabbix היא ארגון פתוח בכיתה
    פתרון ניטור מבוזר במקור
    נועד לנטר ולעקוב
    ביצועים וזמינות של הרשת
    שרתים, מכשיר...
    הורד את Zabbix
  • 3
    KDiff3
    KDiff3
    מאגר זה אינו מתוחזק עוד
    ונשמר למטרות ארכיון. לִרְאוֹת
    https://invent.kde.org/sdk/kdiff3 for
    הקוד החדש ביותר ו
    https://download.kde.o...
    הורד את KDiff3
  • 4
    USBLoaderGX
    USBLoaderGX
    USBLoaderGX הוא GUI עבור
    מטעין ה-USB של Waninkoko, מבוסס על
    libwiigui. זה מאפשר רישום ו
    משיקה משחקי Wii, משחקי Gamecube ו
    בישול ביתי ב-Wii וב-WiiU...
    הורד את USBLoaderGX
  • 5
    ציפור אש
    ציפור אש
    Firebird RDBMS מציע תכונות ANSI SQL
    & פועל על לינוקס, Windows &
    מספר פלטפורמות יוניקס. תכונות
    במקביל וביצועים מצוינים
    & כוח...
    הורד את Firebird
  • 6
    קומפוזר
    קומפוזר
    KompoZer הוא עורך HTML של Wysiwyg המשתמש
    בסיס הקוד של Mozilla Composer. כפי ש
    הפיתוח של Nvu הופסק
    בשנת 2005, KompoZer מתקן באגים רבים ו
    מוסיף f...
    הורד את KompoZer
  • עוד »

פקודות לינוקס

Ad