У меня есть сценарий пакетной обработки, который делает некоторую обработку и называет некоторые сценарии жемчуга.
Мой вопрос состоит в том, если был способ поместить код жемчуга непосредственно в сценарий пакетной обработки и иметь выполненный оба типа сценариев.
Active Perl делает это уже много лет!
Ниже приведен скелет. Вы можете вызвать perl только один раз. Потому что передача ему ключа -x
говорит, что вы найдете код perl встроенным в этот файл, и perl будет читать вниз по файлу, пока не найдет шебанг perl (#!...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
), потому что в коде сверху вы ограничены в использовании одинарных кавычек.
Однако:
Поэтому я предлагаю вместо этого написать весь процесс в одной Perl-программе.
Обновление: если у вас есть один скрипт и несколько модулей Perl, которые вы хотите объединить в один пакетный файл, вы можете объединить Perl-файл с помощью fatpack
, а затем применить pl2bat
к результату.
Есть способ сделать это, но он не будет красивым. Вы можете повторить свой код Perl во временном файле .pl
, а затем запустить этот файл из вашего .bat
.