Que hay de verdad y de mentira en Perl

En el lenguaje de programación Perl no hay valores especiales, que es el significado de la verdad y la mentira.

Cualquier valor de Perl puede interpretar como un valor booleano. Por ejemplo, la cadena 'Hello' — es la verdad. El siguiente código muestra la cadena de 'true':

▶ Run
#!/usr/bin/perl

if ('Hello') {
    print 'true';
} else {
    print 'false';
}

¿Cuál son mentiras

En el lenguaje de programación Perl hay 5 valores que son mentiras. Es:

  • undef
  • 0 — número de 0
  • 0.0 — número de 0.0
  • '' es una cadena vacía
  • '0' — fila 0

He aquí un ejemplo de código que muestra que todos estos valores se interpretan Perl como una mentira. El código de muestra de 5 veces la palabra 'false':

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

¿Cuál son verdad

La verdad son todos los valores, excepto los de 5, que son mentiras.

La regla

Para recordar lo que es falso, puede usar la regla: "Todos los que 0 es false, además de '0 but true' filas".

Todos estos 5 valores, que son false, si se utilizan como números se convierten en 0. Aquí está el código que esto confirma el código de muestra de 5 ceros:

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

La verdad, si utilizar use strict; y use warnings; (que casi siempre vale la pena hacerlo), en el caso de undef y una cadena vacía Perl mostrará advertencias.

Aquí está el código y el resultado de su trabajo en el caso de undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

Y aquí está el código y su resultado en el caso de una cadena vacía:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

En Perl existen tales valores, que en un contexto booleano true, pero cuando se usa en como los números se convierten en el número cero. Todos estos valores son cadenas.

Por ejemplo, la cadena '0ASDF' — éste es apenas un ejemplo de este valor. Cuando se utiliza como un valor booleano esta línea se interpreta como una verdad. Realmente, sólo hay 2 líneas, que son mentira — una cadena vacía y la fila que contiene sólo un símbolo — el número cero, cadena de '0ASDF' no es ninguna de estas dos líneas, por lo que no es mentira y la verdad.

Aquí está el código, que indica que la cadena de '0ASDF' es la verdad (código mostrará en la pantalla de la cadena de 'true'):

▶ Run
#!/usr/bin/perl

if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

Y si en esta misma línea de '0ASDF' utilizar como un número, se interpreta como el número 0 la verdad es que, cuando se use strict;, use warnings; será de advertencia):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

El más famoso de uso 0 but true valores se produce en la biblioteca Perl DBI, allí se utiliza la cadena de '0E0'.

La Matriz, Hash, El Enlace

La matriz es la verdad si hay al menos un valor. Si la matriz no tiene ningún valor, lo una matriz es una mentira.

De la misma manera, si en хеше tiene al menos un par de valores, el hash es la verdad. Si en хеше no ni un par de valores, lo que es una mentira.

La referencia es siempre la verdad, no importa en la que se hace referencia. Incluso una referencia a una matriz de [] o un hash {} es la verdad.

Uno y una cadena vacía

Más a menudo para escribir en el código de la verdad, se utiliza el número uno, y para escribir la mentira se utiliza el número cero.

Es interesante que el propio Perl considera que el valor canónico para referirse a la mentira no es el número de 0, mientras que la cadena vacía ''.

He aquí un ejemplo que muestra. Tomamos la línea 'Hello', que es la verdad y con la ayuda de un operador unario ! convirtieron en una mentira:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

El resultado — en la pantalla aparece el texto $VAR1 = '';

Si utilizar el operador ! dos veces, obtenemos el valor canónico de la verdad desde el punto de vista de Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(en la pantalla aparecerá el texto $VAR1 = 1;).

El problema de la accesibilidad

Más a menudo para escribir en el código de la verdad, se utiliza el número uno, y para escribir la mentira se utiliza el número cero. Pero, por desgracia, a partir de estos números en absoluto claro qué significa el número (y puede haber otros números) o es la bandera que significa la verdad.

He aquí un ejemplo. Aquí el 1 de workers significa que se debe utilizar un воркер (se puede sustituir por 10). Y la unidad de el log significa que habilitar la identificación (y sólo se puede sustituir por 0 para desactivar):

my $config = {
    workers => 1,
    log => 1,
};

Otros articulos