Operatøren monadiske minus - i Perl

Antal

Hvis monadiske minus er anvendt et tal eller en streng, der indeholder antallet, så drift resultat er en række med et modsat fortegn (med undtagelse af en situation med nul, om det i næste afsnit).

Her er et eksempel. Denne kode vil vise -3 (ingen fejl og ingen advarsler vil ikke):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3';

Og det -3, som vi har modtaget, dette er antallet -3, ikke '-3'.

Nul

Hvis du anvender den monadiske minus til antal 0 eller række '0', vil resultatet være antallet 0.

Bareword

Hvis du anvender den monadiske minus at den identifikator, vil resultatet være en streng, der består af et minus, og det - ID. I dette eksempel, at den variable $var er i overensstemmelse '-asdf'. Ingen fejl, og advarsler nr.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = - asdf;

print $var;

Den identifikator, som skal begynde med en understregning eller med et brev. Her er den kode, der anvender ciffer som den første karakter:

▶ Run
#!/usr/bin/perl

my $var = - 3asdf;

print $var;

Denne kode vil skabe en fejl:

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.

En streng med et nummer, der begynder med de tegn, + eller -

Her er et eksempel kode:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Resultatet af denne kode afhænger af den version af Perl. 5.8, 5.10, 5.12 viser den første linje -44, og den anden +44. Da 5.14 den anden linje vil 44 uden plus.

Og her er et eksempel på kode, generelt har 3 forskellige måder, afhængigt af Perl version:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

5.8, 5.10, 5.12 viser -0, +0, Version 5.14 og 5.16 viser to nuller. Og da 5.18 på skærmen vil -0 og 0.

Den linje, der begynder med de tegn, + eller -

I tilfældet, hvis du anvender den monadiske minus at den linje, der starter med et plus eller minus, resultatet er en streng, der begynder med et andet tegn. Her er et eksempel:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Programmet vil vise:

-asdf
+asdf

En streng, der ikke begynder med en + eller -

I denne situation, Perl, vil prøve at konvertere en streng til et tal.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3.8asdf';

Resultatet af ovenstående kode er en advarsel, og antallet -3.8:

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

Officiel dokumentation

Her er et uddrag af output perldoc perlop om den monadiske 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 ....

Andre artikler