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