*[פונקציות מספריות](../perlfunc-by-category.md)* # abs מחזיר את הערך המוחלט של מספר. `abs` מקבל סקלר יחיד, מאלץ אותו להקשר מספרי ומחזיר את גודלו — הערך לאחר הסרת הסימן. מחרוזות לא־מספריות מומרות לפי אותם כללים כמו בחישוב אריתמטי (רווח מוביל וסימן אופציונלי, אחריהם ספרות; השאר מושלך, עם אזהרה תחת `use warnings`). אם `VALUE` מושמט, `abs` פועל על [`$_`](../perlvar.md). ## תקציר ```perl abs VALUE abs abs($x) ``` ## מה מוחזר מספר אי־שלילי. התוצאה היא מספר שלם אם הקלט היה מספר שלם בטווח השלמים של הפלטפורמה, אחרת מספר בנקודה צפה. `abs` לעולם אינו משנה את הארגומנט שלו — התוצאה היא סקלר חדש, ולכן `abs $x` משאיר את `$x` ללא שינוי. ## מצב גלובלי שהפונקציה נוגעת בו ללא ארגומנט, `abs` קורא את [`$_`](../perlvar.md). הוא אינו כותב ואינו קורא משתנה מיוחד אחר. תחת `use warnings`, ארגומנט לא־מספרי מעורר את האזהרה התקנית `Argument "…" isn't numeric` דרך מסלול ההמרה המספרית הרגיל. ## דוגמאות הסרת הסימן ממספר שלם: ```perl print abs(-7); # 7 print abs(7); # 7 ``` גודל בנקודה צפה — התוצאה שומרת על הדיוק המלא של הקלט: ```perl print abs(-3.14159); # 3.14159 print abs(-1e-10); # 1e-10 ``` שימוש בצורת ברירת המחדל של הארגומנט בתוך לולאה על [`$_`](../perlvar.md): ```perl for (-3, -1, 0, 2, 4) { print abs, "\n"; # 3, 1, 0, 2, 4 on separate lines } ``` מרחק בין שתי נקודות על ציר מספרים: ```perl sub distance { abs($_[0] - $_[1]) } print distance(10, 3); # 7 print distance(3, 10); # 7 ``` מחרוזת שנראית כמו מספר שלילי — `abs` מפענח את הקידומת המספרית המובילה ומסיר את הסימן: ```perl print abs("-42"); # 42 print abs(" -3.5xyz"); # 3.5 (warning under use warnings) ``` ## מקרי קצה - **`abs(undef)`** מחזיר `0`. תחת `use warnings` הוא פולט `Use of uninitialized value in abs`. - **מחרוזת לא־מספרית**: `abs("hello")` מחזיר `0` ומזהיר תחת `use warnings` שהארגומנט אינו מספרי. - **גבול הצפת מספר שלם**: `abs` של המספר השלם השלילי ביותר של הפלטפורמה (`PERL_INT_MIN`, למשל `-2**63` בבנייה 64־ביט) מקודם לתוצאה בנקודה צפה, מכיוון שהמקבילה החיובית אינה נכנסת למספר שלם עם סימן: ```perl use Config; my $min = -(2 ** ($Config{ivsize} * 8 - 1)); print abs($min); # 9.22337203685478e+18 on 64-bit ``` - **ערכים מיוחדים של IEEE 754**: `abs(-0.0)` מחזיר `0` (אפס חיובי). `abs("-Inf")` מחזיר `Inf`. `abs("NaN")` מחזיר `NaN` — ל־`NaN` אין סימן ש־`abs` יכול להסיר באופן משמעותי. - **מספרים מרוכבים ומספרים שלמים גדולים** אינם מטופלים על ידי הפונקציה המובנית. `use Math::Complex` עוקף את `abs` כדי לחשב את המודולוס; Math::BigIntext ו־Math::BigFloatext מספקים הסרת סימן משלהם על אובייקטים מבורכים באמצעות העמסת אופרטורים. - **אין צורת in-place**: `abs` תמיד מחזיר סקלר חדש. כדי להחליף את ערכו של משתנה בגודלו, יש להציב חזרה: ```perl $x = abs $x; ``` - **הערת parser**: הצורה האונארית `abs $x` נכרכת חזק יותר מ־`,` אך רפה יותר מרוב האופרטורים האריתמטיים, ולכן `abs $x + 1` מתפענח כ־`abs($x) + 1`, ולא `abs($x + 1)`. יש להקיף בסוגריים במקרה של ספק: ```perl print abs $x + 1; # abs($x) + 1 print abs($x + 1); # abs of the sum ``` ## הבדלים מן ה-upstream תואם מלא ל־Perl 5.42 upstream. ## ראו גם - [`sqrt`](sqrt.md) — שורש ריבועי; כמו `abs` היא פונקציה אונארית מספרית טהורה עם צורת ברירת מחדל ל־[`$_`](../perlvar.md) - [`int`](int.md) — קיטום לעבר אפס; משתלב עם `abs` כאשר רוצים את הגודל השלם של מספר בנקודה צפה - [`sprintf`](sprintf.md) — פלט מספרי מעוצב; יש להשתמש ב־`%d` או `%g` יחד עם `abs` להצגת גדלים ללא סימן - [`$_`](../perlvar.md) — ארגומנט ברירת המחדל כאשר `abs` נקרא ללא ארגומנט