2010-06-17 14 views

Respuesta

1

Hay es una forma de hacer esto, pero no será bonita. Puede hacer eco de su código perl en un archivo temp .pl y luego ejecutar ese archivo desde su .bat.

+0

Pensé en eso, pero pensé que haría llorar a mi compañero de trabajo. :) – Rick

4

Sí, puedes.

De hecho, esto es exactamente lo que hace la herramienta pl2bat: transforma un programa perl en un archivo por lotes que incrusta el programa perl. Eche un vistazo a pl2bat.bat.

Para que pueda tomar el .pl, conviértalo con pl2bat, y luego ajustar la parte del lote como sea necesario. La mayor parte del código del lote debe colocarse al final del archivo (cerca de la etiqueta :end_of_perl) porque en el código de la parte superior está limitado a no usar comillas simples.

Sin embargo:

  • este enfoque simple no funcionará si necesita integrar más que un archivo de perl
  • esta será una pesadilla de mantenimiento.

Por lo tanto, sugiero que se escriba todo el proceso en un solo programa Perl.

Actualización: si tiene una secuencia de comandos y algunos módulos de Perl que desea combinar en un solo archivo por lotes, puede combinar el archivo Perl usando fatpack y, a continuación, aplicar pl2bat en el resultado.

+0

Ese fue el problema. Tenía 2 archivos Perl que quería usar. ¡Pero gracias por la sugerencia! – Rick

+0

@Rick: He actualizado mi respuesta para su caso. – dolmen

22

Active Perl ha estado haciendo esto durante años!

A continuación se muestra un esqueleto. No obstante, solo puede llamar a Perl una vez. Como al pasarlo, el modificador -x dice que encontrará el código perl incrustado en este archivo, y Perl lee el archivo hasta que encuentra un shenb perl (#!...perl) y comienza a ejecutar allí. Perl ignorará todo más allá del __END__ y como le dijo a DOS al goto endofperl, no se molestará con nada hasta que llegue a la etiqueta.

@rem = '--*-Perl-*-- 
@echo off 
perl -x -S %0 %* 
goto endofperl 


@rem -- BEGIN PERL -- '; 
#!d:/Perl/bin/perl.exe -w 
#line 10 

use strict; 


__END__ 
:endofperl 
+0

¡Este es exactamente el tipo de cosa que estaba buscando! Yo votaría sobre esto pero me dice que me registre para hacer eso. – Rick

Cuestiones relacionadas