Может ли Perl и Batch работать в одном и том же командном файле?

У меня есть пакет script, который выполняет некоторую обработку и вызывает некоторые скрипты perl.

Мой вопрос в том, есть ли способ перенести код perl непосредственно в пакетный script и запустить его оба типа скриптов.

Ответ 1

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

Ответ 2

Да, вы можете.

Фактически это именно то, что делает инструмент pl2bat: он преобразует программу perl в пакетный файл, в который встроена программа perl. Посмотрите на сам pl2bat.bat.

Итак, вы можете взять .pl, преобразовать его с помощью pl2bat, а затем настроить пакетную часть по мере необходимости. Большая часть пакетного кода должна быть помещена в конец файла (рядом с меткой :end_of_perl), потому что в коде вверху вы ограничены не использованием одинарных кавычек.

Однако:

  • этот простой подход не будет работать, если вам нужно вставить больше одного файла perl
  • Это будет кошмар для обслуживания.

Поэтому я предлагаю вместо этого написать весь процесс в одной программе Perl.

Обновление:, если у вас есть один script и некоторые модули Perl, которые вы хотите объединить в одном пакетном файле, вы можете объединить файл Perl с помощью fatpack, а затем применить pl2bat к результату.

Ответ 3

Есть способ сделать это, но он не будет красивым. Вы можете повторить свой Perl-код в файле temp .pl, а затем запустить этот файл из своего .bat.