que - Cadena de la versión de Perl: ¿por qué usar EVAL EXPR?
catalyst que es (4)
Acabo de tomar nota de esto generado por Catalyst.pl
. Obviamente es una especie de hackeo sin anotar. ¿Cuál es la ventaja de configurar una cadena de versión como esta? Ni siquiera puedo imaginar lo que están tratando de hacer.
our $VERSION = ''0.01'';
$VERSION = eval $VERSION;
Desde perlmodstyle: Numeración de versiones.
Si desea lanzar una versión ''beta'' o ''alfa'' de un módulo pero no quiere que CPAN.pm lo incluya como el más reciente, use un ''_'' después del número de versión regular seguido de al menos 2 dígitos, por ejemplo. 1.20_01. Si haces esto, se recomienda el siguiente idioma:
- $ VERSION = "1.12_01";
- $ XS_VERSION = $ VERSION; # solo es necesario si tienes código XS
- $ VERSION = eval $ VERSION;
Con ese truco, MakeMaker solo leerá la primera línea y, por lo tanto, leerá el guión bajo, mientras que el intérprete de Perl evaluará $ VERSION y convertirá la cadena en un número. Las operaciones posteriores que traten a $ VERSION como un número podrán hacerlo sin provocar una advertencia de que $ VERSION no es un número.
La evaluación convierte la cadena "0.001_001"
en un número, siguiendo las reglas de los literales numéricos de Perl (que permiten subrayar la legibilidad). El resultado es el número 0.001001
.
Sin la evaluación, la cadena se convierte en un número siguiendo la regla para convertir cadenas, que se detiene en el primer carácter no numérico.
Ejemplo: perl -e ''print "0.001_001" + 0''
Los números de versión son complejos en Perl. Aquí hay una excelente visión general para aquellos que buscan los detalles sangrientos. Podría sorprenderte de cuántas maneras sutiles hay para hacer las cosas mal ...
Sin embargo, la respuesta directa a tu pregunta es que las cosas diferentes esperan formatos diferentes. Para CPAN, te interesan las versiones de desarrollo, por ejemplo, como una cadena. Para el tiempo de ejecución, te preocupas por ellos como un número.
Considere el caso de $VERSION = "0.01_001"
. eval
convierte al número 0.01001
correctamente.
Puede que no lo recuerde, pero creo que a algunos analizadores de código automatizados les gusta ver la línea de código:
our $VERSION = ''0.01'';
Pero realmente quieres que $ VERSION mantenga una flotación en lugar de una cadena.
Es posible que desee leer este artículo , sé que voy a.
Oh, Dios mío, ahora recuerdo por qué uso
our $VERSION = 20100903;
números de versión de estilo. Eso es una locura. Amo a Perl, pero eso es pura locura, refinada y concentrada. No intentaré resumir el artículo de David Golden. Solo hay que leerlo y llorar.