1 | #!perl -w
|
---|
2 | $0 =~ s|\.bat||i;
|
---|
3 | unless (-f $0) {
|
---|
4 | $0 =~ s|.*[/\\]||;
|
---|
5 | for (".", split ';', $ENV{PATH}) {
|
---|
6 | $_ = "." if $_ eq "";
|
---|
7 | $0 = "$_/$0" , goto doit if -f "$_/$0";
|
---|
8 | }
|
---|
9 | die "`$0' not found.\n";
|
---|
10 | }
|
---|
11 | doit: exec "perl", "-x", $0, @ARGV;
|
---|
12 | die "Failed to exec `$0': $!";
|
---|
13 | __END__
|
---|
14 |
|
---|
15 | =head1 NAME
|
---|
16 |
|
---|
17 | runperl.bat - "universal" batch file to run perl scripts
|
---|
18 |
|
---|
19 | =head1 SYNOPSIS
|
---|
20 |
|
---|
21 | C:\> copy runperl.bat foo.bat
|
---|
22 | C:\> foo
|
---|
23 | [..runs the perl script `foo'..]
|
---|
24 |
|
---|
25 | C:\> foo.bat
|
---|
26 | [..runs the perl script `foo'..]
|
---|
27 |
|
---|
28 |
|
---|
29 | =head1 DESCRIPTION
|
---|
30 |
|
---|
31 | This file can be copied to any file name ending in the ".bat" suffix.
|
---|
32 | When executed on a DOS-like operating system, it will invoke the perl
|
---|
33 | script of the same name, but without the ".bat" suffix. It will
|
---|
34 | look for the script in the same directory as itself, and then in
|
---|
35 | the current directory, and then search the directories in your PATH.
|
---|
36 |
|
---|
37 | It relies on the C<exec()> operator, so you will need to make sure
|
---|
38 | that works in your perl.
|
---|
39 |
|
---|
40 | This method of invoking perl scripts has some advantages over
|
---|
41 | batch-file wrappers like C<pl2bat.bat>: it avoids duplication
|
---|
42 | of all the code; it ensures C<$0> contains the same name as the
|
---|
43 | executing file, without any egregious ".bat" suffix; it allows
|
---|
44 | you to separate your perl scripts from the wrapper used to
|
---|
45 | run them; since the wrapper is generic, you can use symbolic
|
---|
46 | links to simply link to C<runperl.bat>, if you are serving your
|
---|
47 | files on a filesystem that supports that.
|
---|
48 |
|
---|
49 | On the other hand, if the batch file is invoked with the ".bat"
|
---|
50 | suffix, it does an extra C<exec()>. This may be a performance
|
---|
51 | issue. You can avoid this by running it without specifying
|
---|
52 | the ".bat" suffix.
|
---|
53 |
|
---|
54 | Perl is invoked with the -x flag, so the script must contain
|
---|
55 | a C<#!perl> line. Any flags found on that line will be honored.
|
---|
56 |
|
---|
57 | =head1 BUGS
|
---|
58 |
|
---|
59 | Perl is invoked with the -S flag, so it will search the PATH to find
|
---|
60 | the script. This may have undesirable effects.
|
---|
61 |
|
---|
62 | =head1 SEE ALSO
|
---|
63 |
|
---|
64 | perl, perlwin32, pl2bat.bat
|
---|
65 |
|
---|
66 | =cut
|
---|
67 |
|
---|