以下代码摘自典型的pl2bat文件。
对于那些 pl2bat/perl2bat 文件,我可以理解“goto”和“#!”是什么意思。行做。
但是那行
';
中的两个字符@rem ';
呢?
放两个字
';
有什么特别的用途吗?
;
是 perl 行分隔符。
但是那条线没有意义,因为
perl -x
已经确保它忽略了#!perl
行之前的行
perl -x -S %0 %*
goto endofperl
@rem ';
#! perl
#line 29
它关闭了较早的报价。
pl2bat
实用程序转换
#!/usr/bin/perl
use v5.14;
say "Hi";
进入
@rem = '--*-Perl-*--
@set "ErrorLevel="
@if "%OS%" == "Windows_NT" @goto WinNT
@perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
@set ErrorLevel=%ErrorLevel%
@goto endofperl
:WinNT
@perl -x -S %0 %*
@set ErrorLevel=%ErrorLevel%
@if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" @goto endofperl
@if %ErrorLevel% == 9009 @echo You do not have Perl in your PATH.
@goto endofperl
@rem ';
#!/usr/bin/perl
#line 16
use v5.14;
say "Hi";
__END__
:endofperl
@set "ErrorLevel=" & @goto _undefined_label_ 2>NUL || @"%COMSPEC%" /d/c @exit %ErrorLevel%
如果作为批处理文件执行,它将最终执行
perl -x -S %0 %*
,这将告诉Perl从#!
行开始执行。
但是将批处理文件直接传递给 Perl 也可以,因为它看到了
@rem = '...';
#!/usr/bin/perl
#line 16
use v5.14;
say "Hi";
__END__