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