Commit | Line | Data |
---|---|---|
d444a431 TB |
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 |