是否有任何单个魔术“前导”会使Perl脚本在Windows(作为批处理文件)或Linux(作为可执行文件)下运行,类似于那些制作的前导码它可以在任何shell下工作吗?
答案 0 :(得分:7)
我怀疑你可以让windows接受shbang(#!
)。因此,如果您可以使用默认shell(在我的情况下使用bash)运行,那么这适用于bash:
@REM <<:END_REM
@echo off
echo This is DOS, this will only run in DOS.
perl -x -S %0 %*
goto over_nix
:END_REM
echo This is *NIX, this will only run in *NIX.
perl -x -S $0 $*
:<<__END__
#!perl
use 5.012;
use Data::Dumper;
say Dumper( \%ENV );
__END__
@REM <<:over_nix
:over_nix
这需要我的NIX路径中的可执行文件'@REM'
。
echo >> ~/bin/@REM
chmod +x ~/bin/@REM
答案 1 :(得分:3)
你的意思是像ActiveState Perl附带的这些包装器?
@rem = '--*-Perl-*--
@echo off
if "%OS%" == "Windows_NT" goto WinNT
perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
goto endofperl
:WinNT
perl -x -S %0 %*
if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
if %errorlevel% == 9009 echo You do not have Perl in your PATH.
if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
goto endofperl
@rem ';
#!perl
#line 15
eval 'exec Z:\Software\Perl\5.8.8\bin\perl.exe -S $0 ${1+"$@"}'
if $running_under_some_shell;
#!/usr/bin/perl
# $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $
use strict;
=head1 NAME
cpan - easily interact with CPAN from the command line
脚本以这些行结束:
1;
__END__
:endofperl
虽然我不确定你真的需要最后的BAT标签“:endofperl”或顶部的“goto endofperl”(可以使用“退出”吗?)。