b56d202a7b6fde679e34c99fdf3a6b1712e88ca3
[p5sagit/p5-mst-13.2.git] / vms / perlvms.pod
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 vmsperl@genetics.upenn.edu.
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<perlapi> 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, you shouldn't nest the source directory
125 too deeply in your directory structure, lest you eccedd RMS'
126 maximum of 8 levels of subdirectory in a filespec.  (You
127 can use rooted logical names to get another 8 levels of
128 nesting, if you can't place the files near the top of
129 the physical directory structure.)
130
131 VMS support for this process in the current release of Perl
132 is sufficient to handle most extensions.  However, it does
133 not yet recognize extra libraries required to build shareable
134 images which are part of an extension, so these must be added
135 to the linker options file for the extension by hand.  For
136 instance, if the F<PGPLOT> extension to Perl requires the
137 F<PGPLOTSHR.EXE> shareable image in order to properly link
138 the Perl extension, then the line C<PGPLOTSHR/Share> must
139 be added to the linker options file F<PGPLOT.Opt> produced
140 during the build process for the Perl extension.
141
142 By default, the shareable image for an extension is placed
143 in the F<[.Lib.Auto.>I<Arch>.I<Extname>F<]> directory of the
144 installed Perl directory tree (where I<Arch> is F<VMS_VAX> or
145 F<VMS_AXP>, followed by the Perl version number, and I<Extname>
146 is the name of the extension, with each C<::> translated to C<.>).
147 However, it can be manually placed in any of several locations:
148    - the F<[.Lib.Auto.>I<Extname>F<]> subdirectory of one of
149      the directories in C<@INC>, or
150    - one of the directories in C<@INC>, or
151    - a directory which the extensions Perl library module
152      passes to the DynaLoader when asking it to map
153      the shareable image, or
154    - F<Sys$Share> or F<Sys$Library>.
155 If the shareable image isn't in any of these places, you'll need
156 to define a logical name I<Extshortname>, where I<Extshortname>
157 is the portion of the extension's name after the last C<::>, which
158 translates to the full file specification of the shareable image.
159
160 =head1 File specifications
161
162 =head2 Syntax
163
164 We have tried to make Perl aware of both VMS-style and Unix-
165 style file specifications wherever possible.  You may use 
166 either style, or both, on the command line and in scripts, 
167 but you may not combine the two styles within a single fle 
168 specification.  VMS Perl interprets Unix pathnames in much
169 the same way as the CRTL (I<e.g.> the first component of
170 an absolute path is read as the device name for the
171 VMS file specification).  There are a set of functions
172 provided in the C<VMS::Filespec> package for explicit
173 interconversion between VMS and Unix syntax; its
174 documentation provides more details.
175
176 Filenames are, of course, still case-insensitive.  For
177 consistency, most Perl routines return  filespecs using
178 lower case letters only, regardless of the case used in
179 the arguments passed to them.  (This is true  only when
180 running under VMS; Perl respects the case-sensitivity
181 of OSs like Unix.)
182
183 We've tried to minimize the dependence of Perl library 
184 modules on Unix syntax, but you may find that some of these, 
185 as well as some scripts written for Unix systems, will 
186 require that you use Unix syntax, since they will assume that 
187 '/' is the directory separator, I<etc.>  If you find instances 
188 of this in the Perl distribution itself, please let us know, 
189 so we can try to work around them. 
190
191 =head2 Wildcard expansion
192
193 File specifications containing wildcards are allowed both on 
194 the command line and within Perl globs (e.g. <CE<lt>*.cE<gt>>).  If 
195 the wildcard filespec uses VMS syntax, the resultant 
196 filespecs will follow VMS syntax; if a Unix-style filespec is 
197 passed in, Unix-style filespecs will be returned.
198
199 If the wildcard filespec contains a device or directory 
200 specification, then the resultant filespecs will also contain 
201 a device and directory; otherwise, device and directory 
202 information are removed.  VMS-style resultant filespecs will 
203 contain a full device and directory, while Unix-style 
204 resultant filespecs will contain only as much of a directory 
205 path as was present in the input filespec.  For example, if 
206 your default directory is Perl_Root:[000000], the expansion 
207 of C<[.t]*.*> will yield filespecs  like 
208 "perl_root:[t]base.dir", while the expansion of C<t/*/*> will 
209 yield filespecs like "t/base.dir".  (This is done to match 
210 the behavior of glob expansion performed by Unix shells.) 
211
212 Similarly, the resultant filespec will contain the file version
213 only if one was present in the input filespec.
214
215 =head2 Pipes
216
217 Input and output pipes to Perl filehandles are supported; the 
218 "file name" is passed to lib$spawn() for asynchronous 
219 execution.  You should be careful to close any pipes you have 
220 opened in a Perl script, lest you leave any "orphaned" 
221 subprocesses around when Perl exits. 
222
223 You may also use backticks to invoke a DCL subprocess, whose 
224 output is used as the return value of the expression.  The 
225 string between the backticks is passed directly to lib$spawn 
226 as the command to execute.  In this case, Perl will wait for 
227 the subprocess to complete before continuing. 
228
229 =head1 PERL5LIB and PERLLIB
230
231 The PERL5LIB and PERLLIB logical names work as documented L<perl>,
232 except that the element separator is '|' instead of ':'.  The
233 directory specifications may use either VMS or Unix syntax.
234
235 =head1 Command line
236
237 =head2 I/O redirection and backgrounding
238
239 Perl for VMS supports redirection of input and output on the 
240 command line, using a subset of Bourne shell syntax:
241
242     <F<file> reads stdin from F<file>,
243     >F<file> writes stdout to F<file>,
244     >>F<file> appends stdout to F<file>,
245     2>F<file> writes stderr to F<file>, and
246     2>>F<file> appends stderr to F<file>. 
247
248 In addition, output may be piped to a subprocess, using the  
249 character '|'.  Anything after this character on the command 
250 line is passed to a subprocess for execution; the subprocess 
251 takes the output of Perl as its input.
252
253 Finally, if the command line ends with '&', the entire 
254 command is run in the background as an asynchronous 
255 subprocess.
256
257 =head2 Command line switches
258
259 The following command line switches behave differently under
260 VMS than described in L<perlrun>.  Note also that in order
261 to pass uppercase switches to Perl, you need to enclose
262 them in double-quotes on the command line, since the CRTL
263 downcases all unquoted strings.
264
265 =over 4
266
267 =item -i
268
269 If the C<-i> switch is present but no extension for a backup
270 copy is given, then inplace editing creates a new version of
271 a file; the existing copy is not deleted.  (Note that if
272 an extension is given, an existing file is renamed to the backup
273 file, as is the case under other operating systems, so it does
274 not remain as a previous version under the original filename.)
275
276 =item -S
277
278 If the C<-S> switch is present I<and> the script name does
279 not contain a directory, then Perl translates the logical
280 name DCL$PATH as a searchlist, using each translation as
281 a directory in which to look for the script.  In addition,
282 if no file type is specified, Perl looks in each directory
283 for a file matching the name specified, with a blank type,
284 a type of F<.pl>, and a type of F<.com>, in that order.
285
286 =item -u
287
288 The C<-u> switch causes the VMS debugger to be invoked
289 after the Perl program is compiled, but before it has
290 run.  It does not create a core dump file.
291
292 =back
293
294 =head1 Perl functions
295
296 As of the time this document was last revised, the following 
297 Perl functions were implemented in the VMS port of Perl 
298 (functions marked with * are discussed in more detail below):
299
300     file tests*, abs, alarm, atan, binmode*, bless,
301     caller, chdir, chmod, chown, chomp, chop, chr,
302     close, closedir, cos, crypt*, defined, delete,
303     die, do, dump*, each, endpwent, eof, eval, exec*,
304     exists, exit, exp, fileno, fork*, getc, getlogin,
305     getpwent*, getpwnam*, getpwuid*, glob, gmtime*, goto,
306     grep, hex, import, index, int, join, keys, kill*,
307     last, lc, lcfirst, length, local, localtime, log, m//,
308     map, mkdir, my, next, no, oct, open, opendir, ord, pack,
309     pipe, pop, pos, print, printf, push, q//, qq//, qw//,
310     qx//, quotemeta, rand, read, readdir, redo, ref, rename,
311     require, reset, return, reverse, rewinddir, rindex,
312     rmdir, s///, scalar, seek, seekdir, select(internal),
313     select (system call)*, setpwent, shift, sin, sleep,
314     sort, splice, split, sprintf, sqrt, srand, stat,
315     study, substr, sysread, system*, syswrite, tell,
316     telldir, tie, time, times*, tr///, uc, ucfirst, umask,
317     undef, unlink*, unpack, untie, unshift, use, utime*,
318     values, vec, wait, waitpid*, wantarray, warn, write, y///
319
320 The following functions were not implemented in the VMS port, 
321 and calling them produces a fatal error (usually) or 
322 undefined behavior (rarely, we hope):
323
324     chroot, dbmclose, dbmopen, fcntl, flock,
325     getpgrp, getppid, getpriority, getgrent, getgrgid,
326     getgrnam, setgrent, endgrent, ioctl, link, lstat,
327     msgctl, msgget, msgsend, msgrcv, readlink, semctl,
328     semget, semop, setpgrp, setpriority, shmctl, shmget,
329     shmread, shmwrite, socketpair, symlink, syscall, truncate
330
331 The following functions may or may not be implemented, 
332 depending on what type of socket support you've built into 
333 your copy of Perl:
334
335     accept, bind, connect, getpeername,
336     gethostbyname, getnetbyname, getprotobyname,
337     getservbyname, gethostbyaddr, getnetbyaddr,
338     getprotobynumber, getservbyport, gethostent,
339     getnetent, getprotoent, getservent, sethostent,
340     setnetent, setprotoent, setservent, endhostent,
341     endnetent, endprotoent, endservent, getsockname,
342     getsockopt, listen, recv, select(system call)*,
343     send, setsockopt, shutdown, socket
344
345 =over 4
346
347 =item File tests
348
349 The tests C<-b>, C<-B>, C<-c>, C<-C>, C<-d>, C<-e>, C<-f>,
350 C<-o>, C<-M>, C<-s>, C<-S>, C<-t>, C<-T>, and C<-z> work as
351 advertised.  The return values for C<-r>, C<-w>, and C<-x>
352 tell you whether you can actually access the file; this may
353 not reflect the UIC-based file protections.  Since real and
354 effective UIC don't differ under VMS, C<-O>, C<-R>, C<-W>,
355 and C<-X> are equivalent to C<-o>, C<-r>, C<-w>, and C<-x>.
356 Similarly, several other tests, including C<-A>, C<-g>, C<-k>,
357 C<-l>, C<-p>, and C<-u>, aren't particularly meaningful under
358 VMS, and the values returned by these tests reflect whatever
359 your CRTL C<stat()> routine does to the equivalent bits in the
360 st_mode field.  Finally, C<-d> returns true if passed a device
361 specification without an explicit directory (e.g. C<DUA1:>), as
362 well as if passed a directory.
363
364 Note: Some sites have reported problems when using the file-access
365 tests (C<-r>, C<-w>, and C<-x>) on files accessed via DEC's DFS.
366 Specifically, since DFS does not currently provide access to the
367 extended file header of files on remote volumes, attempts to
368 examine the ACL fail, and the file tests will return false,
369 with C<$!> indicating that the file does not exist.  You can
370 use C<stat> on these files, since that checks UIC-based protection
371 only, and then manually check the appropriate bits, as defined by
372 your C compiler's F<stat.h>, in the mode value it returns, if you
373 need an approximation of the file's protections.
374
375 =item binmode FILEHANDLE
376
377 The C<binmode> operator will attempt to insure that no translation
378 of carriage control occurs on input from or output to this filehandle.
379 Since this involves reopening the file and then restoring its
380 file position indicator, if this function returns FALSE, the
381 underlying filehandle may no longer point to an open file, or may
382 point to a different position in the file than before C<binmode>
383 was called.
384
385 Note that C<binmode> is generally not necessary when using normal
386 filehandles; it is provided so that you can control I/O to existing
387 record-structured files when necessary.  You can also use the
388 C<vmsfopen> function in the VMS::Stdio extension to gain finer
389 control of I/O to files and devices with different record structures.
390
391 =item crypt PLAINTEXT, USER
392
393 The C<crypt> operator uses the C<sys$hash_password> system
394 service to generate the hashed representation of PLAINTEXT.
395 If USER is a valid username, the algorithm and salt values
396 are taken from that user's UAF record.  If it is not, then
397 the preferred algorithm and a salt of 0 are used.  The
398 quadword encrypted value is returned as an 8-character string.
399
400 The value returned by C<crypt> may be compared against
401 the encrypted password from the UAF returned by the C<getpw*>
402 functions, in order to authenticate users.  If you're
403 going to do this, remember that the encrypted password in
404 the UAF was generated using uppercase username and
405 password strings; you'll have to upcase the arguments to
406 C<crypt> to insure that you'll get the proper value:
407
408   sub validate_passwd {
409     my($user,$passwd) = @_;
410     my($pwdhash);
411     if ( !($pwdhash = (getpwnam($user))[1]) ||
412          $pwdhash ne crypt("\U$passwd","\U$name") ) {
413       intruder_alert($name);
414     }
415     return 1;
416   }
417
418 =item dump
419
420 Rather than causing Perl to abort and dump core, the C<dump>
421 operator invokes the VMS debugger.  If you continue to
422 execute the Perl program under the debugger, control will
423 be transferred to the label specified as the argument to
424 C<dump>, or, if no label was specified, back to the
425 beginning of the program.  All other state of the program
426 (I<e.g.> values of variables, open file handles) are not
427 affected by calling C<dump>.
428
429 =item exec LIST
430
431 The C<exec> operator behaves in one of two different ways.  
432 If called after a call to C<fork>, it will invoke the CRTL 
433 C<execv()> routine, passing its arguments to the subprocess 
434 created by C<fork> for execution.  In this case, it is 
435 subject to all limitations that affect C<execv()>.  (In 
436 particular, this usually means that the command executed in 
437 the subprocess must be an image compiled from C source code, 
438 and that your options for passing file descriptors and signal 
439 handlers to the subprocess are limited.)
440
441 If the call to C<exec> does not follow a call to C<fork>, it 
442 will cause Perl to exit, and to invoke the command given as 
443 an argument to C<exec> via C<lib$do_command>.  If the argument 
444 begins with a '$' (other than as part of a filespec), then it 
445 is executed as a DCL command.  Otherwise, the first token on 
446 the command line is treated as the filespec of an image to 
447 run, and an attempt is made to invoke it (using F<.Exe> and 
448 the process defaults to expand the filespec) and pass the 
449 rest of C<exec>'s argument to it as parameters.
450
451 You can use C<exec> in both ways within the same script, as 
452 long as you call C<fork> and C<exec> in pairs.  Perl
453 keeps track of how many times C<fork> and C<exec> have been
454 called, and will call the CRTL C<execv()> routine if there have
455 previously been more calls to C<fork> than to C<exec>.
456
457 =item fork
458
459 The C<fork> operator works in the same way as the CRTL 
460 C<vfork()> routine, which is quite different under VMS than 
461 under Unix.  Specifically, while C<fork> returns 0 after it 
462 is called and the subprocess PID after C<exec> is called, in 
463 both cases the thread of execution is within the parent 
464 process, so there is no opportunity to perform operations in 
465 the subprocess before calling C<exec>.
466
467 In general, the use of C<fork> and C<exec> to create 
468 subprocess is not recommended under VMS; wherever possible, 
469 use the C<system> operator or piped filehandles instead.
470
471 =item getpwent
472
473 =item getpwnam
474
475 =item getpwuid
476
477 These operators obtain the information described in L<perlfunc>,
478 if you have the privileges necessary to retrieve the named user's
479 UAF information via C<sys$getuai>.  If not, then only the C<$name>,
480 C<$uid>, and C<$gid> items are returned.  The C<$dir> item contains
481 the login directory in VMS syntax, while the C<$comment> item
482 contains the login directory in Unix syntax. The C<$gcos> item
483 contains the owner field from the UAF record.  The C<$quota>
484 item is not used.
485
486 =item gmtime
487
488 The C<gmtime> operator will function properly if you have a
489 working CRTL C<gmtime()> routine, or if the logical name
490 SYS$TIMEZONE_DIFFERENTIAL is defined as the number of seconds
491 which must be added to UTC to yield local time.  (This logical
492 name is defined automatically if you are running a version of
493 VMS with built-in UTC support.)  If neither of these cases is
494 true, a warning message is printed, and C<undef> is returned.
495
496 =item kill
497
498 In most cases, C<kill> kill is implemented via the CRTL's C<kill()>
499 function, so it will behave according to that function's
500 documentation.  If you send a SIGKILL, however, the $DELPRC system
501 service is is called directly.  This insures that the target
502 process is actually deleted, if at all possible.  (The CRTL's C<kill()>
503 function is presently implemented via $FORCEX, which is ignored by
504 supervisor-mode images like DCL.)
505
506 Also, negative signal values don't do anything special under
507 VMS; they're just converted to the corresponding positive value.
508
509 =item select (system call)
510
511 If Perl was not built with socket support, the system call
512 version of C<select> is not available at all.  If socket
513 support is present, then the system call version of
514 C<select> functions only for file descriptors attached
515 to sockets.  It will not provide information about regular
516 files or pipes, since the CRTL C<select()> routine does not
517 provide this functionality.
518
519 =item stat EXPR
520
521 Since VMS keeps track of files according to a different scheme
522 than Unix, it's not really possible to represent the file's ID
523 in the C<st_dev> and C<st_ino> fields of a C<struct stat>.  Perl
524 tries its best, though, and the values it uses are pretty unlikely
525 to be the same for two different files.  We can't guarantee this,
526 though, so caveat scriptor.
527
528 =item system LIST
529
530 The C<system> operator creates a subprocess, and passes its 
531 arguments to the subprocess for execution as a DCL command.  
532 Since the subprocess is created directly via C<lib$spawn()>, any 
533 valid DCL command string may be specified.  If LIST consists
534 of the empty string, C<system> spawns an interactive DCL subprocess,
535 in the same fashion as typiing B<SPAWN> at the DCL prompt.
536 Perl waits for the subprocess to complete before continuing
537 execution in the current process.
538
539 =item time
540
541 The value returned by C<time> is the offset in seconds from
542 01-JAN-1970 00:00:00 (just like the CRTL's times() routine), in order
543 to make life easier for code coming in from the POSIX/Unix world.
544
545 =item times
546
547 The array returned by the C<times> operator is divided up 
548 according to the same rules the CRTL C<times()> routine.  
549 Therefore, the "system time" elements will always be 0, since 
550 there is no difference between "user time" and "system" time 
551 under VMS, and the time accumulated by subprocess may or may 
552 not appear separately in the "child time" field, depending on 
553 whether L<times> keeps track of subprocesses separately.  Note
554 especially that the VAXCRTL (at least) keeps track only of
555 subprocesses spawned using L<fork> and L<exec>; it will not
556 accumulate the times of suprocesses spawned via pipes, L<system>,
557 or backticks.
558
559 =item unlink LIST
560
561 C<unlink> will delete the highest version of a file only; in
562 order to delete all versions, you need to say
563     1 while (unlink LIST);
564 You may need to make this change to scripts written for a
565 Unix system which expect that after a call to C<unlink>,
566 no files with the names passed to C<unlink> will exist.
567 (Note: This can be changed at compile time; if you
568 C<use Config> and C<$Config{'d_unlink_all_versions'}> is
569 C<define>, then C<unlink> will delete all versions of a
570 file on the first call.)
571
572 C<unlink> will delete a file if at all possible, even if it
573 requires changing file protection (though it won't try to
574 change the protection of the parent directory).  You can tell
575 whether you've got explicit delete access to a file by using the
576 C<VMS::Filespec::candelete> operator.  For instance, in order
577 to delete only files to which you have delete access, you could
578 say something like
579
580     sub safe_unlink {
581         my($file,$num);
582         foreach $file (@_) {
583             next unless VMS::Filespec::candelete($file);
584             $num += unlink $file;
585         }
586         $num;
587     }
588
589 (or you could just use C<VMS::Stdio::remove>, if you've installed
590 the VMS::Stdio extension distributed with Perl). If C<unlink> has to
591 change the file protection to delete the file, and you interrupt it
592 in midstream, the file may be left intact, but with a changed ACL
593 allowing you delete access.
594
595 =item utime LIST
596
597 Since ODS-2, the VMS file structure for disk files, does not keep
598 track of access times, this operator changes only the modification
599 time of the file (VMS revision date).
600
601 =item waitpid PID,FLAGS
602
603 If PID is a subprocess started by a piped L<open>, C<waitpid>
604 will wait for that subprocess, and return its final
605 status value.  If PID is a subprocess created in some other way
606 (e.g. SPAWNed before Perl was invoked), or is not a subprocess of
607 the current process, C<waitpid> will check once per second whether
608 the process has completed, and when it has, will return 0.  (If PID
609 specifies a process that isn't a subprocess of the current process,
610 and you invoked Perl with the C<-w> switch, a warning will be issued.)
611
612 The FLAGS argument is ignored in all cases.
613
614 =back
615
616 =head1 Perl variables
617
618 The following VMS-specific information applies to the indicated
619 "special" Perl variables, in addition to the general information
620 in L<perlvar>.  Where there is a conflict, this infrmation
621 takes precedence.
622
623 =over 4
624
625 =item %ENV 
626
627 Reading the elements of the %ENV array returns the 
628 translation of the logical name specified by the key, 
629 according to the normal search order of access modes and 
630 logical name tables.  If you append a semicolon to the
631 logical name, followed by an integer, that integer is
632 used as the translation index for the logical name,
633 so that you can look up successive values for search
634 list logical names.  For instance, if you say
635
636    $  Define STORY  once,upon,a,time,there,was
637    $  perl -e "for ($i = 0; $i <= 6; $i++) " -
638    _$ -e "{ print $ENV{'story;'.$i},' '}"
639
640 Perl will print C<ONCE UPON A TIME THERE WAS>.
641
642 The %ENV keys C<home>, C<path>,C<term>, and C<user>
643 return the CRTL "environment variables" of the same
644 names, if these logical names are not defined.  The
645 key C<default> returns the current default device
646 and directory specification, regardless of whether
647 there is a logical name DEFAULT defined..
648
649 Setting an element of %ENV defines a supervisor-mode logical 
650 name in the process logical name table.  C<Undef>ing or 
651 C<delete>ing an element of %ENV deletes the equivalent user-
652 mode or supervisor-mode logical name from the process logical 
653 name table.  If you use C<undef>, the %ENV element remains 
654 empty.  If you use C<delete>, another attempt is made at 
655 logical name translation after the deletion, so an inner-mode 
656 logical name or a name in another logical name table will 
657 replace the logical name just deleted.  It is not possible
658 at present to define a search list logical name via %ENV.
659
660 At present, the first time you iterate over %ENV using
661 C<keys>, or C<values>,  you will incur a time penalty as all
662 logical names are read, in order to fully populate %ENV.
663 Subsequent iterations will not reread logical names, so they
664 won't be as slow, but they also won't reflect any changes
665 to logical name tables caused by other programs.  The C<each>
666 operator is special: it returns each element I<already> in
667 %ENV, but doesn't go out and look for more.   Therefore, if
668 you've previously used C<keys> or C<values>, you'll see all
669 the logical names visible to your process, and if not, you'll
670 see only the names you've looked up so far.  (This is a
671 consequence of the way C<each> is implemented now, and it
672 may change in the future, so it wouldn't be a good idea
673 to rely on it too much.)
674
675 In all operations on %ENV, the key string is treated as if it 
676 were entirely uppercase, regardless of the case actually 
677 specified in the Perl expression.
678
679 =item $?
680
681 Since VMS status values are 32 bits wide, the value of C<$?>
682 is simply the final status value of the last subprocess to
683 complete.  This differs from the behavior of C<$?> under Unix,
684 and under VMS' POSIX environment, in that the low-order 8 bits
685 of C<$?> do not specify whether the process terminated normally
686 or due to a signal, and you do not need to shift C<$?> 8 bits
687 to the right in order to find the process' exit status.
688
689 =item $!
690
691 The string value of C<$!> is that returned by the CRTL's
692 strerror() function, so it will include the VMS message for
693 VMS-specific errors.  The numeric value of C<$!> is the
694 value of C<errno>, except if errno is EVMSERR, in which
695 case C<$!> contains the value of vaxc$errno.  Setting C<$!>
696 always sets errno to the value specified.  If this value is
697 EVMSERR, it also sets vaxc$errno to 4 (NONAME-F-NOMSG), so
698 that the string value of C<$!> won't reflect the VMS error
699 message from before C<$!> was set.
700
701 =item $^E
702
703 This variable provides direct access to VMS status values
704 in vaxc$errno, which are often more specific than the
705 generic Unix-style error messages in C<$!>.  Its numeric value
706 is the value of vaxc$errno, and its string value is the
707 corresponding VMS message string, as retrieved by sys$getmsg().
708 Setting C<$^E> sets vaxc$errno to the value specified.
709
710 =item $|
711
712 Setting C<$|> for an I/O stream causes data to be flushed
713 all the way to disk on each write (I<i.e.> not just to
714 the underlying RMS buffers for a file).  In other words,
715 it's equivalent to calling fflush() and fsync() from C.
716
717 =back
718
719 =head1 Revision date
720
721 This document was last updated on 28-Feb-1996, for Perl 5, 
722 patchlevel 2.
723
724 =head1 AUTHOR
725
726 Charles Bailey  bailey@genetics.upenn.edu
727