2011-08-04 10 views

Respuesta

5

Usar siempre las advertencias, especialmente en una -liners.

Perl no tiene constantes con nombre verdadero o falso, y sin advertencias o estrictamente habilitado, una "palabra clave" (algo que podría ser una constante o función pero no lo es) se interpreta silenciosamente como una cadena. Por lo tanto, está haciendo if("true") y if("false"), y todas las cadenas que no sean "" o "0" son verdaderas.

10

Si lo ejecuta con un estricto:

perl -Mstrict -e 'if(true) { print 1 }' 

se llega a la razón:

Bareword "true" not allowed while "strict subs" in use at -e line 1. 

Se interpreta como una cadena "true" o "false" que siempre es cierto. Las constantes no están definidos en Perl, pero puede hacerlo usted mismo:

use constant { true => 1, false => 0 }; 
if(false) { print 1 } 
8

Se están utilizando barewords true y false. Las palabras descarnadas son una mala cosa. Si intenta esto:

use strict; 
use warnings; 
if (true){print 1} 

Probablemente obtendrá algo como esto:

Bareword "true" not allowed while "strict subs" in use at - line 3. 
Execution of - aborted due to compilation errors. 

Cualquier valor definido que no se parece a 0 se considera "verdadera". Cualquier valor indefinido o cualquier valor que se parece a 0 (como 0 o "0") se considera "falso". No hay una palabra clave incorporada para estos valores. Usted sólo puede usar 0 y 1 (o un palo en use constant { true => 1, false => 0}; si realmente te molesta. :)

+0

Estoy portar 4GL código para Perl 5, y tener las constantes ayuda. Me había olvidado de eso. Gracias. – octopusgrabbus

Cuestiones relacionadas