Pregunta

He creado un entorno web local Perl en mi máquina de Windows. La aplicación que estoy trabajando es originalmente de un servidor Linux, por lo que el tinglado para los archivos de origen .pl parezca así:

#!/usr/bin/perl

Esto hace que el siguiente error en mi máquina dev de Windows:

(OS 2)The system cannot find the file specified.

¿Es posible cambiar mi configuración del Apache 2 para que el tinglado se ignora en mi máquina de Windows? Por supuesto que podría establecer el tinglado a #!c:\perl\bin\perl.exe, eso es obvio; pero el problema viene a desplegar los archivos actualizados. Es evidente que sería muy inconveniente para cambiar esta de nuevo en cada despliegue. Estoy utilizando ActivePerl en Windows 7.

Actualización:

Debería haber mencionado que tengo que mantener el tinglado para que los guiones funcionarán en nuestro servidor de producción Linux alojamiento compartido. Si no lo tienen esta limitación y no tener que utilizar el tinglado, la respuesta obvia sería la de no utilizarlo.

Otros consejos

No hay una línea tinglado portátil. Perl, incluso en la misma plataforma y arquitectura, alguien podría haber instalado es un lugar diferente.

El truco es no instalar módulos y secuencias de comandos con la mano. Al empaquetar todo como distribuciones y el uso de la cadena de herramientas del módulo, las líneas shebang se modifican automáticamente para apuntar a la perl que utilizó para instalar todo. Usted no debería tener que pensar en estos detalles. :)

Yo uso #! /usr/bin/env perl como el tinglado en toda mi Perl, ya sea en * nix o Windows. Ventanas simplemente lo ignora, y el Unices sigue env a la disto Perl elegido.

La forma Tenía este trabajo era copiar perl.exe a c: / usr / bin / y cambie su nombre a perl (tira el .exe)

En Win7 y hasta también se puede hacer esto con el "dos" MKLINK comandos.

Iniciar un shell cmd como administrador y hacer algo como lo siguiente:

mklink /d c:\usr c:\Perl       # Activestate perl in c:\Perl\bin\perl.exe
mklink /d c:\usr c:\xampp\perl # Xampp perl in c:\xampp\perl\bin\perl.exe

No tengo de Windows útil, pero perlcritic dice:

my $desc = q{Found platform-specific perl shebang line};
my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};

Así que, supongo #! perl debería funcionar.

Edit: no funciona en Linux; al parecer trabaja en parrot, aunque no veo cómo logran eso.

  1. Instalar cualquier sabor de Windows Bash (como Cygwin, MSYS2 o GnuWin32);
  2. Crea una secuencia de comandos shell redireccionamiento trivial:

    exec "@"
    
  3. Crea una entrada de registro:

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    

    (... y así sucesivamente.)

  4. Jot en su archivo httpd.conf:

    ScriptInterpreterSource Registry
    

Apache ahora resolverá Unix shebangs relativa a la interpretación dada por su sabor elegido Bash. Esto da más más flexibilidad que hardcoding caminos del intérprete en el registro.

scroll top