*[Αριθμητικές συναρτήσεις](../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-bit συστήματα) προάγεται σε αποτέλεσμα κινητής υποδιαστολής, επειδή το θετικό αντίστοιχο δεν χωράει σε προσημασμένο ακέραιο:
```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 παρέχουν τη δική τους αφαίρεση προσήμου σε αντικείμενα blessed μέσω υπερφόρτωσης τελεστών.
- **Δεν υπάρχει επιτόπια μορφή**: η `abs` επιστρέφει πάντα νέο βαθμωτό. Για να αντικαταστήσετε την τιμή μιας μεταβλητής με το μέτρο της, εκχωρήστε ξανά:
```perl
$x = abs $x;
```
- **Σημείωση συντακτικού αναλυτή**: η μοναδιαία μορφή `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
Πλήρως συμβατό με το upstream Perl 5.42.
## Δείτε επίσης
- [`sqrt`](sqrt.md) — τετραγωνική ρίζα· όπως και η `abs` είναι καθαρή αριθμητική μοναδιαία συνάρτηση με μορφή προεπιλογής στο [`$_`](../perlvar.md)
- [`int`](int.md) — αποκοπή προς το μηδέν· συνδυάζεται με την `abs` όταν θέλετε το ακέραιο μέτρο ενός αριθμού κινητής υποδιαστολής
- [`sprintf`](sprintf.md) — μορφοποιημένη αριθμητική έξοδος· χρησιμοποιήστε `%d` ή `%g` σε συνδυασμό με την `abs` για να αποδώσετε μη προσημασμένα μέτρα
- [`$_`](../perlvar.md) — το προεπιλεγμένο όρισμα όταν η `abs` καλείται χωρίς όρισμα