L'opérateur unaire moins - en Perl

Le nombre de

Dans ce cas, si unaire moins s'applique au nombre ou à la ligne qui contient le nombre, le résultat du travail est un nombre avec противоположенным signe (à l'exception de la situation avec le zéro sur cela dans la section suivante).

Voici un exemple. Ce code affichera -3 (aucune erreur et aucun l'alerte ne sera pas):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3';

Et c'est -3, que nous avons reçu est exactement le nombre de -3, pas une chaîne de '-3'.

Zéro

Si vous appliquez unaire moins au nombre de 0 ou de la ligne '0', le résultat est le nombre de 0.

Bareword

Si vous appliquez unaire moins à l'id, le résultat est une chaîne composée de moins et ce id. Dans cet exemple, la variable $var s'avère être une chaîne de '-asdf'. Pas d'erreurs et d'avertissements.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = - asdf;

print $var;

L'identificateur doit commencer par un caractère de soulignement ou une lettre. Voici le code qui utilise le chiffre comme premier caractère:

▶ Run
#!/usr/bin/perl

my $var = - 3asdf;

print $var;

Ce code génère une erreur:

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.

Ligne avec le nombre qui commence par + ou -

Voici un exemple de code:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Le résultat de ce code dépend de la version de Perl. 5.8, 5.10, 5.12 affiche dans la première ligne de l' -44, et dans la seconde +44. Depuis 5.14 dans la deuxième ligne sera 44 sans signe.

Et voici un exemple de code, en général dispose de 3 options différentes de travail, en fonction de la version de Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

5.8, 5.10, 5.12 affiche -0, +0, Version 5.14 et 5.16 affiche les deux à zéro. Et, à partir de 5.18 sur l'écran sera -0 et 0.

La ligne qui commence par le caractère + ou -

Dans ce cas, si vous appliquez unaire moins à la ligne qui commence par le signe plus ou du moins, le résultat est une chaîne qui commence avec un caractère différent. Voici un exemple:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

Le programme affichera:

-asdf
+asdf

La chaîne qui ne commence pas par + ou -

Dans une telle situation, Perl essaiera de convertir une chaîne en nombre.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3.8asdf';

Le résultat du travail le code ci-dessus — c'est un avertissement et le nombre de -3.8:

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

La documentation officielle

Voici un extrait de la sortie de la commande perldoc perlop pro unaire moins:

    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 ....

Autres articles