82 lines
2.2 KiB
Batchfile
82 lines
2.2 KiB
Batchfile
@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.
|
|
goto endofperl
|
|
@rem ';
|
|
#!perl -w
|
|
#line 14
|
|
$0 =~ s|\.bat||i;
|
|
unless (-f $0) {
|
|
$0 =~ s|.*[/\\]||;
|
|
for (".", split ';', $ENV{PATH}) {
|
|
$_ = "." if $_ eq "";
|
|
$0 = "$_/$0" , goto doit if -f "$_/$0";
|
|
}
|
|
die "`$0' not found.\n";
|
|
}
|
|
doit: exec "perl", "-x", $0, @ARGV;
|
|
die "Failed to exec `$0': $!";
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
runperl.bat - "universal" batch file to run perl scripts
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
C:\> copy runperl.bat foo.bat
|
|
C:\> foo
|
|
[..runs the perl script `foo'..]
|
|
|
|
C:\> foo.bat
|
|
[..runs the perl script `foo'..]
|
|
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This file can be copied to any file name ending in the ".bat" suffix.
|
|
When executed on a DOS-like operating system, it will invoke the perl
|
|
script of the same name, but without the ".bat" suffix. It will
|
|
look for the script in the same directory as itself, and then in
|
|
the current directory, and then search the directories in your PATH.
|
|
|
|
It relies on the C<exec()> operator, so you will need to make sure
|
|
that works in your perl.
|
|
|
|
This method of invoking perl scripts has some advantages over
|
|
batch-file wrappers like C<pl2bat.bat>: it avoids duplication
|
|
of all the code; it ensures C<$0> contains the same name as the
|
|
executing file, without any egregious ".bat" suffix; it allows
|
|
you to separate your perl scripts from the wrapper used to
|
|
run them; since the wrapper is generic, you can use symbolic
|
|
links to simply link to C<runperl.bat>, if you are serving your
|
|
files on a filesystem that supports that.
|
|
|
|
On the other hand, if the batch file is invoked with the ".bat"
|
|
suffix, it does an extra C<exec()>. This may be a performance
|
|
issue. You can avoid this by running it without specifying
|
|
the ".bat" suffix.
|
|
|
|
Perl is invoked with the -x flag, so the script must contain
|
|
a C<#!perl> line. Any flags found on that line will be honored.
|
|
|
|
=head1 BUGS
|
|
|
|
Perl is invoked with the -S flag, so it will search the PATH to find
|
|
the script. This may have undesirable effects.
|
|
|
|
=head1 SEE ALSO
|
|
|
|
perl, perlwin32, pl2bat.bat
|
|
|
|
=cut
|
|
|
|
__END__
|
|
:endofperl
|