*[פונקציות מספריות](../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` נקרא ללא ארגומנט