Operator унарный minus - w Perl

Liczba

W przypadku, gdy унарный minus odnosi się do liczby lub do linii w której znajduje się liczba, wynik pracy — to liczba z противоположенным towarowym (z wyjątkiem sytuacji z zerem, o tym w następnym rozdziale).

Oto przykład. Ten kod wyświetla -3 (ma błędy i nie ma ostrzeżenia nie będzie):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3';

A to -3, który otrzymaliśmy — to właśnie liczba -3, a nie wiersz '-3'.

Zero

Jeśli zastosować унарный minus do liczby 0 lub wierszu '0', wynik będzie liczba 0.

Bareword

Jeśli zastosować унарный minus do identyfikatora, to wynik będzie ciąg składający się z minus i tego identyfikatora. W tym przykładzie do zmiennej $var okazuje się wiersz '-asdf'. Żadnych błędów i brak ostrzeżeń.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = - asdf;

print $var;

Identyfikator musi rozpoczynać się od znaku podkreślenia lub litery. Oto kod, który wykorzystuje cyfrę jako pierwszego znaku:

▶ Run
#!/usr/bin/perl

my $var = - 3asdf;

print $var;

Ten kod wyświetla błąd:

Bareword found where operator expected at script.pl line 3, near "3asdf"
    (Missing operator before asdf?)
syntax error at script.pl line 3, near "3asdf"
Execution of script.pl aborted due to compilation errors.

Wiersz z liczbą, która rozpoczyna się od znaku + lub -

Oto przykład kodu:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'+44', "\n";
print -'-44', "\n";

Wynik działania tego kodu zależy od wersji Perl. 5.8, 5.10, 5.12 wyświetla w pierwszej linii -44, a w drugiej +44. Od 5.14 w drugiej linii będzie 44 już bez plusa.

A oto przykład kodu, w ogóle ma 3 różne sposoby, w zależności od wersji Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'+0', "\n";
print -'-0', "\n";

5.8, 5.10, 5.12 wyprowadzi na ekran -0, +0, w Wersji 5.14 i 5.16 wyprowadzi na ekran dwa zera. A od 5.18 na ekranie będzie -0 i 0.

Wiersz, który rozpoczyna się od znaku + lub -

W tym przypadku zastosować унарный minus do linii, która zaczyna się od plusa lub minus, to wynik będzie wiersz, który zaczyna się od innego symbolu. Oto przykład:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -"+asdf\n";
print -"-asdf\n";

Program wyświetli na ekranie:

-asdf
+asdf

Wiersz, który nie zaczyna się od znaku + lub -

W takiej sytuacji Perl spróbuje przekonwertować ciąg znaków na liczbę.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3.8asdf';

Wynik działania kodu powyżej — to ostrzeżenie i liczba -3.8:

Argument "3.8asdf" isn't numeric in negation (-) at script.pl line 6.
-3.8

Oficjalna dokumentacja

Oto fragment danych wyjściowych polecenia perldoc perlop o унарный minus:

    Unary "-" performs arithmetic negation if the operand is numeric,
    including any string that looks like a number. If the operand is an
    identifier, a string consisting of a minus sign concatenated with the
    identifier is returned. Otherwise, if the string starts with a plus or
    minus, a string starting with the opposite sign is returned. One effect of
    these rules is that "-bareword" is equivalent to the string "-bareword".
    If, however, the string begins with a non-alphabetic character (excluding
    "+" or "-"), Perl will attempt to convert the string to a numeric, and the
    arithmetic negation is performed. If the string cannot be cleanly
    converted to a numeric, Perl will give the warning Argument "the string"
    isn't numeric in negation (-) at ....

Inne artykuły