source: trunk/essentials/dev-lang/perl/vms/perlvms.pod@ 3187

Last change on this file since 3187 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 38.3 KB
Line 
1=head1 NAME
2
3perlvms - VMS-specific documentation for Perl
4
5=head1 DESCRIPTION
6
7Gathered below are notes describing details of Perl 5's
8behavior on VMS. They are a supplement to the regular Perl 5
9documentation, so we have focussed on the ways in which Perl
105 functions differently under VMS than it does under Unix,
11and on the interactions between Perl and the rest of the
12operating system. We haven't tried to duplicate complete
13descriptions of Perl features from the main Perl
14documentation, which can be found in the F<[.pod]>
15subdirectory of the Perl distribution.
16
17We hope these notes will save you from confusion and lost
18sleep when writing Perl scripts on VMS. If you find we've
19missed something you think should appear here, please don't
20hesitate to drop a line to [email protected].
21
22=head1 Installation
23
24Directions for building and installing Perl 5 can be found in
25the file F<README.vms> in the main source directory of the
26Perl distribution..
27
28=head1 Organization of Perl Images
29
30=head2 Core Images
31
32During the installation process, three Perl images are produced.
33F<Miniperl.Exe> is an executable image which contains all of
34the basic functionality of Perl, but cannot take advantage of
35Perl extensions. It is used to generate several files needed
36to build the complete Perl and various extensions. Once you've
37finished installing Perl, you can delete this image.
38
39Most of the complete Perl resides in the shareable image
40F<PerlShr.Exe>, which provides a core to which the Perl executable
41image and all Perl extensions are linked. You should place this
42image in F<Sys$Share>, or define the logical name F<PerlShr> to
43translate to the full file specification of this image. It should
44be world readable. (Remember that if a user has execute only access
45to F<PerlShr>, VMS will treat it as if it were a privileged shareable
46image, and will therefore require all downstream shareable images to be
47INSTALLed, etc.)
48
49
50Finally, F<Perl.Exe> is an executable image containing the main
51entry point for Perl, as well as some initialization code. It
52should be placed in a public directory, and made world executable.
53In order to run Perl with command line arguments, you should
54define a foreign command to invoke this image.
55
56=head2 Perl Extensions
57
58Perl extensions are packages which provide both XS and Perl code
59to add new functionality to perl. (XS is a meta-language which
60simplifies writing C code which interacts with Perl, see
61L<perlxs> for more details.) The Perl code for an
62extension is treated like any other library module - it's
63made available in your script through the appropriate
64C<use> or C<require> statement, and usually defines a Perl
65package containing the extension.
66
67The portion of the extension provided by the XS code may be
68connected to the rest of Perl in either of two ways. In the
69B<static> configuration, the object code for the extension is
70linked directly into F<PerlShr.Exe>, and is initialized whenever
71Perl is invoked. In the B<dynamic> configuration, the extension's
72machine code is placed into a separate shareable image, which is
73mapped by Perl's DynaLoader when the extension is C<use>d or
74C<require>d in your script. This allows you to maintain the
75extension as a separate entity, at the cost of keeping track of the
76additional shareable image. Most extensions can be set up as either
77static or dynamic.
78
79The source code for an extension usually resides in its own
80directory. At least three files are generally provided:
81I<Extshortname>F<.xs> (where I<Extshortname> is the portion of
82the extension's name following the last C<::>), containing
83the XS code, I<Extshortname>F<.pm>, the Perl library module
84for the extension, and F<Makefile.PL>, a Perl script which uses
85the C<MakeMaker> library modules supplied with Perl to generate
86a F<Descrip.MMS> file for the extension.
87
88=head2 Installing static extensions
89
90Since static extensions are incorporated directly into
91F<PerlShr.Exe>, you'll have to rebuild Perl to incorporate a
92new extension. You should edit the main F<Descrip.MMS> or F<Makefile>
93you use to build Perl, adding the extension's name to the C<ext>
94macro, and the extension's object file to the C<extobj> macro.
95You'll also need to build the extension's object file, either
96by adding dependencies to the main F<Descrip.MMS>, or using a
97separate F<Descrip.MMS> for the extension. Then, rebuild
98F<PerlShr.Exe> to incorporate the new code.
99
100Finally, you'll need to copy the extension's Perl library
101module to the F<[.>I<Extname>F<]> subdirectory under one
102of the directories in C<@INC>, where I<Extname> is the name
103of the extension, with all C<::> replaced by C<.> (e.g.
104the library module for extension Foo::Bar would be copied
105to a F<[.Foo.Bar]> subdirectory).
106
107=head2 Installing dynamic extensions
108
109In general, the distributed kit for a Perl extension includes
110a file named Makefile.PL, which is a Perl program which is used
111to create a F<Descrip.MMS> file which can be used to build and
112install the files required by the extension. The kit should be
113unpacked into a directory tree B<not> under the main Perl source
114directory, and the procedure for building the extension is simply
115
116 $ perl Makefile.PL ! Create Descrip.MMS
117 $ mmk ! Build necessary files
118 $ mmk test ! Run test code, if supplied
119 $ mmk install ! Install into public Perl tree
120
121I<N.B.> The procedure by which extensions are built and
122tested creates several levels (at least 4) under the
123directory in which the extension's source files live.
124For this reason if you are running a version of VMS prior
125to V7.1 you shouldn't nest the source directory
126too deeply in your directory structure lest you exceed RMS'
127maximum of 8 levels of subdirectory in a filespec. (You
128can use rooted logical names to get another 8 levels of
129nesting, if you can't place the files near the top of
130the physical directory structure.)
131
132VMS support for this process in the current release of Perl
133is sufficient to handle most extensions. However, it does
134not yet recognize extra libraries required to build shareable
135images which are part of an extension, so these must be added
136to the linker options file for the extension by hand. For
137instance, if the F<PGPLOT> extension to Perl requires the
138F<PGPLOTSHR.EXE> shareable image in order to properly link
139the Perl extension, then the line C<PGPLOTSHR/Share> must
140be added to the linker options file F<PGPLOT.Opt> produced
141during the build process for the Perl extension.
142
143By default, the shareable image for an extension is placed in
144the F<[.lib.site_perl.auto>I<Arch>.I<Extname>F<]> directory of the
145installed Perl directory tree (where I<Arch> is F<VMS_VAX> or
146F<VMS_AXP>, and I<Extname> is the name of the extension, with
147each C<::> translated to C<.>). (See the MakeMaker documentation
148for more details on installation options for extensions.)
149However, it can be manually placed in any of several locations:
150
151=over 4
152
153=item *
154
155the F<[.Lib.Auto.>I<Arch>I<$PVers>I<Extname>F<]> subdirectory
156of one of the directories in C<@INC> (where I<PVers>
157is the version of Perl you're using, as supplied in C<$]>,
158with '.' converted to '_'), or
159
160=item *
161
162one of the directories in C<@INC>, or
163
164=item *
165
166a directory which the extensions Perl library module
167passes to the DynaLoader when asking it to map
168the shareable image, or
169
170=item *
171
172F<Sys$Share> or F<Sys$Library>.
173
174=back
175
176If the shareable image isn't in any of these places, you'll need
177to define a logical name I<Extshortname>, where I<Extshortname>
178is the portion of the extension's name after the last C<::>, which
179translates to the full file specification of the shareable image.
180
181=head1 File specifications
182
183=head2 Syntax
184
185We have tried to make Perl aware of both VMS-style and Unix-
186style file specifications wherever possible. You may use
187either style, or both, on the command line and in scripts,
188but you may not combine the two styles within a single file
189specification. VMS Perl interprets Unix pathnames in much
190the same way as the CRTL (I<e.g.> the first component of
191an absolute path is read as the device name for the
192VMS file specification). There are a set of functions
193provided in the C<VMS::Filespec> package for explicit
194interconversion between VMS and Unix syntax; its
195documentation provides more details.
196
197Filenames are, of course, still case-insensitive. For
198consistency, most Perl routines return filespecs using
199lower case letters only, regardless of the case used in
200the arguments passed to them. (This is true only when
201running under VMS; Perl respects the case-sensitivity
202of OSs like Unix.)
203
204We've tried to minimize the dependence of Perl library
205modules on Unix syntax, but you may find that some of these,
206as well as some scripts written for Unix systems, will
207require that you use Unix syntax, since they will assume that
208'/' is the directory separator, I<etc.> If you find instances
209of this in the Perl distribution itself, please let us know,
210so we can try to work around them.
211
212=head2 Wildcard expansion
213
214File specifications containing wildcards are allowed both on
215the command line and within Perl globs (e.g. C<E<lt>*.cE<gt>>). If
216the wildcard filespec uses VMS syntax, the resultant
217filespecs will follow VMS syntax; if a Unix-style filespec is
218passed in, Unix-style filespecs will be returned.
219Similar to the behavior of wildcard globbing for a Unix shell,
220one can escape command line wildcards with double quotation
221marks C<"> around a perl program command line argument. However,
222owing to the stripping of C<"> characters carried out by the C
223handling of argv you will need to escape a construct such as
224this one (in a directory containing the files F<PERL.C>, F<PERL.EXE>,
225F<PERL.H>, and F<PERL.OBJ>):
226
227 $ perl -e "print join(' ',@ARGV)" perl.*
228 perl.c perl.exe perl.h perl.obj
229
230in the following triple quoted manner:
231
232 $ perl -e "print join(' ',@ARGV)" """perl.*"""
233 perl.*
234
235In both the case of unquoted command line arguments or in calls
236to C<glob()> VMS wildcard expansion is performed. (csh-style
237wildcard expansion is available if you use C<File::Glob::glob>.)
238If the wildcard filespec contains a device or directory
239specification, then the resultant filespecs will also contain
240a device and directory; otherwise, device and directory
241information are removed. VMS-style resultant filespecs will
242contain a full device and directory, while Unix-style
243resultant filespecs will contain only as much of a directory
244path as was present in the input filespec. For example, if
245your default directory is Perl_Root:[000000], the expansion
246of C<[.t]*.*> will yield filespecs like
247"perl_root:[t]base.dir", while the expansion of C<t/*/*> will
248yield filespecs like "t/base.dir". (This is done to match
249the behavior of glob expansion performed by Unix shells.)
250
251Similarly, the resultant filespec will contain the file version
252only if one was present in the input filespec.
253
254=head2 Pipes
255
256Input and output pipes to Perl filehandles are supported; the
257"file name" is passed to lib$spawn() for asynchronous
258execution. You should be careful to close any pipes you have
259opened in a Perl script, lest you leave any "orphaned"
260subprocesses around when Perl exits.
261
262You may also use backticks to invoke a DCL subprocess, whose
263output is used as the return value of the expression. The
264string between the backticks is handled as if it were the
265argument to the C<system> operator (see below). In this case,
266Perl will wait for the subprocess to complete before continuing.
267
268The mailbox (MBX) that perl can create to communicate with a pipe
269defaults to a buffer size of 512. The default buffer size is
270adjustable via the logical name PERL_MBX_SIZE provided that the
271value falls between 128 and the SYSGEN parameter MAXBUF inclusive.
272For example, to double the MBX size from the default within
273a Perl program, use C<$ENV{'PERL_MBX_SIZE'} = 1024;> and then
274open and use pipe constructs. An alternative would be to issue
275the command:
276
277 $ Define PERL_MBX_SIZE 1024
278
279before running your wide record pipe program. A larger value may
280improve performance at the expense of the BYTLM UAF quota.
281
282=head1 PERL5LIB and PERLLIB
283
284The PERL5LIB and PERLLIB logical names work as documented in L<perl>,
285except that the element separator is '|' instead of ':'. The
286directory specifications may use either VMS or Unix syntax.
287
288=head1 Command line
289
290=head2 I/O redirection and backgrounding
291
292Perl for VMS supports redirection of input and output on the
293command line, using a subset of Bourne shell syntax:
294
295=over 4
296
297=item *
298
299C<E<lt>file> reads stdin from C<file>,
300
301=item *
302
303C<E<gt>file> writes stdout to C<file>,
304
305=item *
306
307C<E<gt>E<gt>file> appends stdout to C<file>,
308
309=item *
310
311C<2E<gt>file> writes stderr to C<file>,
312
313=item *
314
315C<2E<gt>E<gt>file> appends stderr to C<file>, and
316
317=item *
318
319C<< 2>&1 >> redirects stderr to stdout.
320
321=back
322
323In addition, output may be piped to a subprocess, using the
324character '|'. Anything after this character on the command
325line is passed to a subprocess for execution; the subprocess
326takes the output of Perl as its input.
327
328Finally, if the command line ends with '&', the entire
329command is run in the background as an asynchronous
330subprocess.
331
332=head2 Command line switches
333
334The following command line switches behave differently under
335VMS than described in L<perlrun>. Note also that in order
336to pass uppercase switches to Perl, you need to enclose
337them in double-quotes on the command line, since the CRTL
338downcases all unquoted strings.
339
340=over 4
341
342=item -i
343
344If the C<-i> switch is present but no extension for a backup
345copy is given, then inplace editing creates a new version of
346a file; the existing copy is not deleted. (Note that if