下面的代码摘录来自典型的pl 2bat文件。对于那些pl 2bat/perl 2bat文件,我可以理解“后藤”和“#!”行的作用。但是@rem ';行中的两个字符';又是怎么回事呢?放这两个字符';有什么特殊的目的吗?;是perl行分隔符。但是该行没有意义,因为perl -x已经确保忽略#!perl行之前的行
@rem ';
';
;
perl -x
#!perl
perl -x -S %0 %* goto endofperl @rem '; #! perl #line 29
waxmsbnn1#
它将结束较早的报价。pl2bat实用程序将
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也能正常工作,因为它看到
perl -x -S %0 %*
#!
@rem = '...'; #!/usr/bin/perl #line 16 use v5.14; say "Hi"; __END__
1条答案
按热度按时间waxmsbnn1#
它将结束较早的报价。
pl2bat
实用程序将变成
如果作为批处理文件执行,它将以执行
perl -x -S %0 %*
结束,这将告诉Perl从#!
行开始执行。但是将批处理文件直接传递给Perl也能正常工作,因为它看到