【发布时间】:2010-06-17 14:52:10
【问题描述】:
我有一个批处理脚本,它进行一些处理并调用一些 perl 脚本。
我的问题是,是否有办法将 perl 代码直接放入批处理脚本并让它运行两种类型的脚本。
【问题讨论】:
标签: perl batch-file polyglot
我有一个批处理脚本,它进行一些处理并调用一些 perl 脚本。
我的问题是,是否有办法将 perl 代码直接放入批处理脚本并让它运行两种类型的脚本。
【问题讨论】:
标签: perl batch-file polyglot
Active Perl 多年来一直这样做!
下面是骷髅。你只能调用 perl once。因为将-x 开关传递给它表示您将在此文件中找到 embedded 的 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 程序中。
更新:如果您想将一个脚本和一些 Perl 模块合并到一个批处理文件中,您可以使用 fatpack 合并 Perl 文件,然后应用 pl2bat on结果。
【讨论】:
有一种方法可以做到这一点,但它不会很漂亮。您可以将您的 perl 代码回显到一个临时的 .pl 文件中,然后在您的 .bat 中运行该文件。
【讨论】: