El operador de -- en Perl

El operador de doble signo menos se utiliza en Perl para reducir el valor de la variable en uno.

Ejemplo:

▶ Run
#!/usr/bin/perl

my $i = 100;

$i--;

print $i;

El programa mostrará en pantalla el número de 99.

La forma de entrada

Hay dos formas de escritura: se puede especificar un operador después de la variable (постфиксная formulario de registro) o antes de la variable (префиксная formulario de registro):

$i--;
--$i;

En caso de que el equipo está en una línea, entonces no hay diferencia entre notaciones prefija y постфиксной de la forma de la escritura. La diferencia es si el operador de -- se utiliza como parte de un equipo. Si -- se encuentra delante de la variable, el valor de la variable aumentará antes de realizar el resto del equipo. Si -- se encuentra después de la variable, el valor de la variable aumentará después de la ejecución del resto del equipo.

He aquí un ejemplo.

Aquí esta el programa mostrará en pantalla el número 100 y 99:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $i = 100;

say $i--;
say $i;

Y aquí esta el programa mostrará en pantalla el número 99 dos veces:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $i = 100;

say --$i;
say $i;

-- para las filas

El operador ++ hay un especial de la magia cuando se aplica a la variable en la que se encuentra la cadena.

El operador de -- de esa magia no. La cadena se convierte a un número y ese número se resta una unidad.

He aquí un ejemplo. El programa mostrará en pantalla el número -1

▶ Run
#!/usr/bin/perl

my $str = 'a1';

$str--;

print $str;

He aquí algunos ejemplos de lo que hará el operador -- con una cadena en una variable:

'a' -> -1
'100ABC' -> 99
'0100ABC' -> 99

El mal uso de

El operador de -- sólo se puede utilizar para las variables. Si intenta utilizar la -- no para la variable y para un número primo, entonces es se generará un error. He aquí un ejemplo de código con el error:

▶ Run
#!/usr/bin/perl

my $i = 100--; # error!

La ejecución de este programa será de error:

Can't modify constant item in postdecrement (--) at script.pl line 3, near "100--"
Execution of script.pl aborted due to compilation errors.

De la misma manera no se puede aplicar a matrices:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

@arr--; # error
Can't modify private array in postdecrement (--) at script.pl line 5, near "@arr--"
Execution of script.pl aborted due to compilation errors.

Y es como un hash:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1,
);

%h--; # error
Can't modify private hash in postdecrement (--) at script.pl line 7, near "%h--"
Execution of script.pl aborted due to compilation errors.

Otros articulos