strawberry instalar descargar active perl cross-platform cygwin solaris

instalar - padre perl



¿Cómo puedo crear un Perl portátil cuando no puedo instalar módulos en el host de destino? (7)

Necesito ejecutar las aplicaciones de Perl que desarrollo en cygwin Windows en servidores HP Unix / Solaris. No soy un superusuario en las máquinas Unix y no puedo tocar la ubicación predeterminada del módulo Perl ni puedo instalar módulos en la ubicación predeterminada del módulo Perl. Además, la instalación de Unix carece de la mayoría de los módulos básicos y no puedo cambiar eso.

Por ejemplo, tengo una aplicación Perl que necesita Esperar, que tiene partes compiladas en C nativas. ¿Cómo implementaría esta aplicación en Unix con sus dependencias requeridas sin tener que instalar nada más en esa caja?

¿Hay alguna manera de construir toda la aplicación Perl en Cygwin Windows y luego simplemente desplegar un ejecutable en Unix y ejecutarlo desde mi directorio de inicio allí?

EDITAR la adición basada en las respuestas hasta el momento:

Gracias en particular a brian , la solución de directorio LIB local parece funcionar en el caso de Perl nativo, pero en el caso de que el módulo Perl necesite componentes C, la compilación multiplataforma, es decir, compilar en cygwin para ejecutar en Solaris, no es realmente posible ya que temía .

Sin embargo, ¿sería útil otra instalación de Linux, es decir, si esto fuera posible entre diferentes sabores de Unix como el paquete Perl en Linux y luego implemente en Solaris / HP? ¿Y algo como lcc ?

También me gustaría saber un poco más si alguien ha desarrollado un paquete nativo de Perl en Windows que incluye todas las dependencias de una aplicación Perl complicada que luego se puede mover a Unix como un solo archivo. (Ahora entiendo que no funcionará en caso de que el código C nativo se incluya como en Expect.pm, pero ¿qué pasa si la aplicación solo utiliza módulos perl puros?)

Básicamente, por muchas razones, intento minimizar el tiempo que necesito para estar conectado a estos hosts Unix de "producción" y hacer todo lo posible localmente de antemano.

Agregué una nueva pregunta de compilación cruzada, ya que sentí que quizás estaba desviando demasiado de la pregunta perl original.

EDITAR - Par parece prometedor para Perl puro, aunque el mismo trato, no busca resolver el problema de compilación multiplataforma para extensiones nativas


Compilar un script Perl con todas sus dependencias en Windows con Cygwin y ejecutarlo Solaris simplemente no va a funcionar.

Ahora la pregunta es: ¿tiene acceso a un compilador en esa computadora Solaris? No es porque no tenga acceso de administrador que no pueda compilar e instalar módulos de Perl en su directorio personal al usar:

perl Makefile.PL PREFIX=$HOME

Si tiene CPAN disponible en su sistema Solaris, puede configurar el prefijo en el shell CPAN de esta manera:

  1. inicia el shell perl -MCPAN -e shell ;
  2. cambie el prefijo con conf makepl_arg PREFIX=/path/to/your/home/directory

Para que se ejecute su secuencia de comandos, puede iniciar perl con el -I $HOME de línea de comandos -I $HOME , por ejemplo:

perl -I $HOME script.pl

Su otra opción sería colocar esto al comienzo de su script

use lib $ENV{''HOME''};


En este caso, consideraría entregar una aplicación completa con su propio Perl. Puedes elegir cualquier versión que te guste y cualquier módulo que te guste. Compile todo, organice todo en un directorio y luego evalúe el resultado. Para implementar, copie el archivo y descomprímalo. Utilice los consejos que otros ya han notado sobre las rutas de búsqueda de bibliotecas, etc. En esencia, su aplicación obtiene su propia pila.

Ahora, el truco es la compilación cruzada. ¿Por qué te estás desarrollando en Cygwin? ¿Es ese un objetivo también? ¿Hay alguna razón por la que no tenga una máquina de desarrollo HP / UX o Solaris? A qué arquitectura se dirige (RISC, SPARC, Intel, etc.). Si no puede obtener hardware para ejecutarlos, obtenga algunas máquinas virtuales para sus objetivos y desarrolle allí.

Aparte de eso, puede instalar módulos en cualquier lugar que tenga permisos. Ver perlfaq8 :


Establezca su variable de entorno PERLLIB en su directorio personal Perl lib o utilice el modificador de línea de comando -I a Perl para indicarlo.

Si tiene acceso a la máquina HP-UX, puede compilar Expect allí e instalarlo en su directorio. Pero la compilación cruzada de Windows a HP-UX es probablemente mucho más difícil. Tendría que crear un compilador cruzado de GCC.


Me he encontrado con esto varias veces en mis sistemas de trabajo. Tenemos una instalación base de Perl 5.8 y no tengo la capacidad de agregar módulos. Esta es la solución que uso:

  1. Crea una carpeta llamada ''lib'' en tu raíz del proyecto (ej: ~ / projects / MyProject / lib)
  2. Todos los módulos que descargue de CPAN deben tener un archivo Makefile y un directorio llamado "lib". Copie los contenidos de la carpeta lib en su carpeta lib recién creada. Algunos módulos solo pueden contener un solo archivo .pm y ninguna estructura de lib. Solo copie el archivo .pm.

Su código debería hacer lo siguiente: primero, use cualquier módulo que se haya instalado normalmente, luego desplace su variable de entorno @INC para usar sus bibliotecas locales:

# Declare Includes -------------------------------------------------------------------------------- use Getopt::Long; use vars qw($VERSION); use DirHandle; use FileHandle; # Force perl to use our local ''lib'' directory for imported modules, this allows us to # use modules without having to install them in th emain perl assembly. However, this #also prevents these modules from being used in other projects. BEGIN { unshift @INC, "lib"; } use Error qw(:try); use SOAP::Transport::HTTP; #use LWP::Protocol::https; use XML::Simple; use XML::Writer; use XML::Writer::String;

La advertencia de este método es que algunos módulos Perl no usan el método ''lib'' o tienen dependencias adicionales. Si tiene problemas, examine Makefile.PL para ver el módulo y vea qué está haciendo.


No he probado esta característica en particular, pero perl2exe dice que admite compilaciones multiplataforma.


Querrás local :: lib . Una vez que haya hecho eso, los módulos de Perl puros deberían funcionar de manera cruzada, pero deberá identificar y volver a instalar los módulos compilados en la plataforma externa. Haga la instalación inicial en un Unix real, cpan en cygwin es lento.


Si tiene un compilador en cada uno de sus sistemas (y algunas otras herramientas necesarias para configurarlo como grep), no solo debería ser capaz de compilar módulos, sino que también debería ser capaz de crear sus propios ejecutables perl.