@rem ';这一行在pl 2bat/perl 2bat中做什么?

xzv2uavs  于 2023-03-13  发布在  Perl
关注(0)|答案(1)|浏览(144)

下面的代码摘录来自典型的pl 2bat文件。
对于那些pl 2bat/perl 2bat文件,我可以理解“后藤”和“#!”行的作用。
但是@rem ';行中的两个字符';又是怎么回事呢?
放这两个字符';有什么特殊的目的吗?
;是perl行分隔符。
但是该行没有意义,因为perl -x已经确保忽略#!perl行之前的行

perl -x -S %0 %*
goto endofperl
@rem ';
#! perl
#line 29
waxmsbnn

waxmsbnn1#

它将结束较早的报价。
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__

相关问题