Могут ли 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,

Другие вопросы по тегам