Могут ли Perl и Batch работать в одном пакетном файле?
У меня есть пакетный скрипт, который выполняет некоторую обработку и вызывает некоторые сценарии Perl.
Мой вопрос заключается в том, был ли способ поместить код perl непосредственно в пакетный сценарий и запустить на нем оба типа сценариев.
3 ответа
Активный Perl делал это годами!
Ниже скелет. Вы можете вызвать Perl только один раз. Потому что, передавая это -x
switch говорит, что вы найдете код perl, встроенный в этот файл, и perl читает файл до тех пор, пока не найдет perl shebang (#!...perl
) и начинает выполнять там. Perl будет игнорировать все, что за __END__
и потому что вы сказали DOS goto endofperl
это ни с чем не побеспокоится, пока не доберется до лейбла.
@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
Да, ты можешь.
На самом деле это именно то, что pl2bat
Инструмент делает: он превращает Perl-программу в командный файл, который встраивает Perl-программу. Взгляните на сам pl2bat.bat.
Так что вы можете взять .pl
, преобразовать его с pl2bat
, а затем настройте часть партии, как вам нужно. Большая часть кода пакета должна быть помещена в конец файла (рядом с :end_of_perl
label), потому что в верхнем коде вы не должны использовать одинарные кавычки.
Тем не мение:
- этот простой подход не будет работать, если вам нужно встроить более одного файла perl
- это будет кошмар обслуживания.
Поэтому я предлагаю вместо этого написать весь процесс в одной Perl-программе.
Обновление: если у вас есть один скрипт и несколько модулей Perl, которые вы хотите объединить в один пакетный файл, вы можете объединить файл Perl, используя fatpack
, а затем применить pl2bat
на результат.
Есть способ сделать это, но это не будет красиво. Вы можете повторить свой Perl-код в темп .pl
файл, а затем запустите этот файл изнутри вашего .bat
,