El operador unario menos - en Perl

El número de

En caso de que unaria se aplica al número o a la línea en la que se el número, el resultado de la ejecución es un número con противоположенным signo (además de la situación de cero, sobre esto en la siguiente sección).

He aquí un ejemplo. Este código mostrará -3 (ningún error y ninguna advertencias no se):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3';

Y esto -3, que hemos recibido es el número de -3, y no la cadena de '-3'.

Cero

Si se aplica la unaria entre 0 o en la barra de '0', el resultado será el número de 0.

Bareword

Si se aplica la unaria a la identidad, entonces el resultado será una cadena compuesta de menos y de esta id. En este ejemplo, la variable $var resulta cadena '-asdf'. No hay problemas, y alerta no.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = - asdf;

print $var;

El identificador debe comenzar con un carácter de subrayado o con letras. Aquí está el código que utiliza la cifra como el primer carácter:

▶ Run
#!/usr/bin/perl

my $var = - 3asdf;

print $var;

Este código generará un error:

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.

Cadena con el número que comienza con el carácter + o -

He aquí un ejemplo de código:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

El resultado del trabajo de este código depende de la versión de Perl. 5.8, 5.10, 5.12 muestra en la primera línea de la -44, mientras que en la segunda +44. A partir de 5.14 en la segunda línea se 44 ya sin signo.

Y he aquí un ejemplo de código, en general, tiene 3 diferentes opciones de trabajo, dependiendo de la versión de Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

5.8, 5.10, 5.12 muestra -0, +0, la Versión 5.14 y 5.16 muestra las dos a cero. Y a partir de 5.18 en la pantalla se -0 y 0.

La línea que comienza con un carácter de + o -

En caso de aplicar unaria a la línea que comienza con un signo más o menos, el resultado será una cadena que comienza con un carácter diferente. He aquí un ejemplo:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

El programa mostrará en pantalla:

-asdf
+asdf

La cadena, que no comienza con el carácter + o -

En esta situación, Perl intentará convertir una cadena en un número.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

print -'3.8asdf';

El resultado del código anterior es la prevención y el número de -3.8:

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

La documentación oficial

He aquí un fragmento de la salida del comando perldoc perlop sobre unaria:

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

Otros articulos