Estoy usando Term::ANSIColor
en mi script Perl para hacer la coloración de la salida del terminal, y estoy usando la función colorstrip
, que solo se agregó en Term::ANSIColor
versión 2.01, de acuerdo con el registro de cambios. Entonces, ¿hay alguna manera de hacer que mi script automáticamente die
con un mensaje de error apropiado si no encuentra al menos esa versión de Term::ANSIcolor
?¿Cómo uso una determinada versión (o superior) de un módulo perl en mi script perl?
Respuesta
Justo:
use Term::ANSIColor 2.01;
Ver perldoc -f use
:
uso Módulo VERSIÓN LISTA
Si el argumento VERSIÓN está presente entre el módulo y la lista, entonces el uso llamará al Método VERSIÓN en clase Módulo con la versión dada como argumento. El método VERSIÓN predeterminado, heredado de la clase UNIVERSAL, croaks si la versión dada es mayor que el valor de la variable $ Module :: VERSION.
La mayoría de los módulos definen la variable del paquete $VERSION
.
use Term::ANSIColor;
die "Sorry, this program needs Term::ANSIColor >= v2.01!\n"
unless $Term::ANSIColor::VERSION >= 2.01;
Esta es también una buena manera de especificar un máximo versión de un módulo.
use Module::Foo;
die "You need an *older* version of Module::Foo that ",
"still has the &barbaz method defined"
if $Module::Foo::VERSION >= 0.47;
basta con especificar la versión que desea utilizar:
use Some::Module 2.13;
Si la versión no es al menos 2,13, la operación fallará.
Usted puede experimentar con la versión que está disponible en la línea de comandos:
perl -MSome::Module=9999 -e 'exit 0'
Esto suele morir con el número de versión incorrecta se muestra en el mensaje de error (a menos que el módulo que está tratando de utilizar sucede tener un número de versión de 5 dígitos o más, o a menos que el módulo sea como strict
y no le gusta que se cargue a través de la línea de comando con un número de versión o como URI
(ver los comentarios para más detalles)).
$ perl -MFile::Find=999 -e 'exit 0'
File::Find version 999 required--this is only version 1.07 at
/usr/perl5/5.8.4/lib/Exporter/Heavy.pm line 121.
BEGIN failed--compilation aborted.
$ perl -e 'use File::Find 999; exit 0'
File::Find version 999 required--this is only version 1.07 at -e line 1.
BEGIN failed--compilation aborted at -e line 1.
$
Ejecutar en una máquina que normalmente no uso, de ahí la versión anticuada de Perl.
Los dos son sutilmente diferentes; la línea de comando -M switch nunca especifica una VERSIÓN para usar; en su lugar, lo proporciona como un parámetro para la rutina de importación del módulo, y los módulos que usan Exporter hacen una verificación de versión. Pero no todos los módulos usan Exporter. – ysth
Esto no funciona de manera confiable con todos los módulos, por lo que no es una técnica general, como dice ysth. –
@ysth y @brian: OK - tomo su palabra; No lo he probado en todos los módulos de CPAN, pero la única vez que me he encontrado con un problema con los números de versión es con los submódulos de un módulo principal que no configuran de manera confiable su propia versión. ¿Puedes dar una o dos instancias de módulos donde no funciona? –
- 1. Módulo Perl uso
- 2. ¿Cómo ejecuto un script Perl desde un script Perl?
- 3. ¿Cómo uso un módulo Perl desde una ubicación relativa?
- 4. ¿Cómo puedo encontrar la versión de un módulo Perl instalado?
- 5. ¿Cómo uso las constantes de un módulo Perl?
- 6. ¿Cómo puedo agregar internacionalización a mi script de Perl?
- 7. ¿Cómo puedo empaquetar mi script Perl para que se ejecute en una máquina sin Perl?
- 8. En Perl, ¿cuál es la diferencia entre un archivo .pm (módulo Perl) y un archivo .pl (script Perl)?
- 9. ¿Cómo puede mi script de Perl encontrar su módulo en el mismo directorio?
- 10. Perl - Paquete Temas/Módulo
- 11. ¿Cómo localizar una variable en un ámbito superior en Perl?
- 12. Script Perl utilizable como programa y como módulo
- 13. ¿Cómo encuentro las dependencias del módulo de mi script de Perl?
- 14. ¿Cómo puedo averiguar qué script, programa o shell ejecutó mi script de Perl?
- 15. ¿Cómo escribir una referencia de función en un módulo Perl?
- 16. ¿Cómo instalo un módulo? Strawberry Perl emite
- 17. ¿Cómo puedo depurar un script de Perl?
- 18. ¿Cómo se especifica una versión del paquete en Perl?
- 19. En Perl, ¿cómo puedo verificar desde qué módulo se importó una función determinada?
- 20. ¿Cómo verificar la disponibilidad de Perl, su versión y la presencia de un módulo requerido?
- 21. ¿Cómo 'uso' un módulo Perl en un directorio que no está en @INC?
- 22. ¿Cómo se crea un módulo Perl?
- 23. ¿Cómo puedo compilar mi script Perl para que se pueda ejecutar en sistemas sin Perl instalado?
- 24. ¿Cómo puedo obtener la versión y la ubicación de un módulo Perl instalado?
- 25. ¿Cómo especifico una versión perl mínima para mi distribución en Dist :: Zilla dist.ini?
- 26. ¿Cómo encontrar archivos/carpetas recursivamente en Perl script?
- 27. ¿Cómo puedo modificar mi script Perl para usar múltiples procesadores?
- 28. ¿Cómo puedo forzar la descarga de un módulo Perl?
- 29. ¿Sabe un módulo Perl dónde está instalado?
- 30. ¿Cómo estructurar mi programa Perl CGI?
Es una buena forma de hacerlo. Cuando suministra una versión en la lista de importación, confía en el método de importación que realmente maneja esto. No solo eso, la técnica de importación solo requiere esa versión o posterior. Si quieres una versión o rango de versiones en particular, terminas con esta técnica más general. –
En realidad, no se necesita ayuda del método 'import'; cuando usa' use' o 'require' con un número de versión, se genera una llamada al método' VERSION'. Pero cada paquete que no lo anula específicamente obtiene un método adecuado de 'VERSIÓN' de 'UNIVERSAL'. – hobbs
@brian probablemente debería haberlo etiquetado en el mensaje anterior, así que ahora estoy :) – hobbs