• Publicidad

Actualización de los módulos

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Actualización de los módulos

Notapor davidferrero » 2009-09-24 04:08 @214

Tengo una ligera duda sobre el funcionamiento de Perl en la máquina Linux.

Lógicamente, es mejor utilizar los módulos como tales en vez de copiarlos y usarlo como si fueran scripts. Una de las ventajas es que la actualización del módulo requerirá que se copie y se realicen los cambios de nuevo, sino me equivoco, pero mi pregunta es, en una máquina Linux en la que tenemos instalados varios módulos de Perl, ¿la actualización de los mismos se realiza con las actualizaciones de la máquina o sería necesario actualizar Perl cada vez que se actualizara la versión instalando la nueva versión?, es decir, una situación como la de que se pueda dar la actualización de un módulo sin la actualización de las versiones de Perl, ¿se puede o debe actualizar los módulos que se utilizan en Perl, y esta es automática con el sistema o se debe provocar con algún comando?

Perdón por mi ignorancia y gracias de antemano por la respuesta.
davidferrero
Perlero nuevo
Perlero nuevo
 
Mensajes: 25
Registrado: 2009-07-29 03:12 @175

Publicidad

Re: Actualización de los módulos

Notapor explorer » 2009-09-24 05:10 @256

Hay dos tipos de módulos (básicamente): los que vienen con la propia distribución de Perl (los CORE) y los que añades a mayores.

Cuando actualizas un sistema Linux, también estás actualizando el Perl y los módulos CORE. Como regla general, los programas que dependen de ellos seguirán funcionando, salvo alguno que requiera alguna funcionalidad que alguno de los módulos haya decidido eliminar. O que se haya eliminado de la lista de módulos CORE, por ser un módulo que ha sido superado por otros. En esos casos, se modifica el programa y listo. Es algo que tenemos que hacer siempre, sin importar el lenguaje informático o el sistema operativo: si las condiciones de funcionamiento cambian, pues tenemos que ajustar el programa a esas nuevas condiciones.

Los otros módulos, "pueden" seguir funcionando con sus versiones anteriores. Digo que "pueden" porque:
* algunos pueden depender de módulos CORE, y solo de ciertas versiones de esos módulos. Así que si actualizamos los CORE, es posible que alguno de los módulos extra, deje de funcionar
* otros módulos están compilados con librerías estáticas escritas en C o C++, y no son compatibles a nivel binario con el ejecutable de Perl... y cosas así... no te queda más solución que actualizar esos módulos.

Como regla general, siempre es bueno actualizar los módulos, pues sabes que tendrán más features y más errores corregidos. Lo malo es que vendrán con errores nuevos :)

Hay casos extremos, como el que me pasó en el 2007: allí usamos el módulo Date::Set para hacer cálculos de meses cotizados por los funcionarios. De un problema que tenía muchas líneas con muchos bucles y condiciones, se resolvió en un par de días con la simple aritmética de conjuntos que dábamos en clase de matemáticas en primaria.

Bueno, pues el caso es que al año siguiente, ese módulo desapareció, literalmente, de CPAN.

Su autor, Flávio Soibelmann Glock, decidió que era mejor que su módulo perteneciese al proyecto DateTime en Perl, lo cual es lógico, porque de esta manera, todo el procesamiento de fechas está centralizado en un único sitio. Lo malo fue que su solución fue muy drástica: borrar el módulo de CPAN. Lo que debería haber hecho es marcarlo como deprecated e indicar en la documentación que se debería usar, a partir de entonces el nuevo módulo DateTime::Set.

Esto es un ejemplo de problema muy gordo: nos obliga a cambiar los programas, y además de manera muy profunda.

Una solución sería la de no actualizar el módulo, y seguir usando la versión anterior. En CPAN, los autores suelen dejar unas cuantas versiones anteriores de sus módulos. En el caso del módulo Date::Set, que desapareció, basta con visitar BACKPAN y encontrarlo. Esto es algo que no todos los lenguajes informáticos tienen: un repositorio con toda la historia y todas las versiones anteriores de los módulos.

La otra solución... poner el módulo nuevo y reescribir el programa. :)

Lo que te he contado es un caso extremo. En la inmensa mayoría de las situaciones, te vale con actualizar la lista de módulos instalados. Y este es un tema recurrente en Google (buscar por upgrade perl cpan).

El procedimiento correcto es actualizar módulo por módulo, sacándolo del sistema de paquetería de software de la distribución del sistema operativo, o instalándolo con el comando cpan. Así, nos aseguramos de que los módulos que requieren una compilación lo están con las librerías propias de nuestro sistema operativo. O, con el comando cpan, nos estamos bajando la última versión.

El procedimiento más cómodo es usar el comando cpan. Entras en el sistema viejo y ejecutas el comando cpan. Dentro de él, ejecutas el comando autobundle, que generará un módulo con la lista de todos los módulos Perl instalados en el sistema.

Luego te vas al nuevo sistema, llevas ese módulo, y le dices al comando cpan que lo instale. cpan se encargará de bajar, descomprimir, compilar, montar, documentar e instalar todos los módulos.

Sí que es lo más cómodo, pero no es perfecto: es muy posible que tengas que intentarlo varias veces. Y que algunos módulos necesiten ser compilados con librerías que no tengas instaladas. Lo mejor: intenta siempre instalar los módulos Perl que vengan con tu nueva versión del sistema operativo. Luego, lanza cpan con el módulo creado con el autobundle. cpan se encargará de bajar solo los módulos que aún no estén instalados.

Tienes más detalles aquí (en inglés) (busca por autobundle). En Google tienes muchos más enlaces sobre este tema.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14477
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados