Perl和Batch可以在同一个批处理文件中运行吗?

Ric*_*ick 15 perl polyglot batch-file

我有一个批处理脚本执行一些处理并调用一些perl脚本.

我的问题是,是否有办法将perl代码直接放入批处理脚本并让它运行两种类型的脚本.

Axe*_*man 24

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
Run Code Online (Sandbox Code Playgroud)


dol*_*men 5

是的你可以。

事实上,这正是该pl2bat工具的作用:它将 perl 程序转换为嵌入 perl 程序的批处理文件。查看 pl2bat.bat 本身。

因此,您可以使用.pl,使用 进行转换pl2bat,然后根据需要调整批处理部分。批处理代码的最大部分必须放在文件末尾(靠近标签:end_of_perl),因为在顶部的代码中,您被限制不能使用单引号。

然而:

  • 如果您需要嵌入多个 perl 文件,那么这种简单的方法将不起作用
  • 这将是一场维护噩梦。

因此我建议将整个过程写在一个 Perl 程序中。

更新:如果您想将一个脚本和一些 Perl 模块合并到一个批处理文件中,则可以使用 合并 Perl 文件fatpack,然后应用pl2bat结果。


akf*_*akf 1

一种方法可以做到这一点,但它不会很漂亮。您可以将 Perl 代码回显到临时.pl文件中,然后从.bat.