Могут ли Perl и Batch работать в одном пакетном файле? - PullRequest
15 голосов
/ 17 июня 2010

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

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

Ответы [ 3 ]

24 голосов
/ 17 июня 2010

Активный 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
4 голосов
/ 17 июня 2010

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

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

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

Однако:

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

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

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

1 голос
/ 17 июня 2010

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

...