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 vmsperl@perl.org. 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 347an extension is given, an existing file is renamed to the backup 348file, as is the case under other operating systems, so it does 349not remain as a previous version under the original filename.) 350 351=item -S 352 353If the C<"-S"> or C<-"S"> switch is present I<and> the script 354name does not contain a directory, then Perl translates the 355logical name DCL$PATH as a searchlist, using each translation 356as a directory in which to look for the script. In addition, 357if no file type is specified, Perl looks in each directory 358for a file matching the name specified, with a blank type, 359a type of F<.pl>, and a type of F<.com>, in that order. 360 361=item -u 362 363The C<-u> switch causes the VMS debugger to be invoked 364after the Perl program is compiled, but before it has 365run. It does not create a core dump file. 366 367=back 368 369=head1 Perl functions 370 371As of the time this document was last revised, the following 372Perl functions were implemented in the VMS port of Perl 373(functions marked with * are discussed in more detail below): 374 375 file tests*, abs, alarm, atan, backticks*, binmode*, bless, 376 caller, chdir, chmod, chown, chomp, chop, chr, 377 close, closedir, cos, crypt*, defined, delete, 378 die, do, dump*, each, endpwent, eof, eval, exec*, 379 exists, exit, exp, fileno, getc, getlogin, getppid, 380 getpwent*, getpwnam*, getpwuid*, glob, gmtime*, goto, 381 grep, hex, import, index, int, join, keys, kill*, 382 last, lc, lcfirst, length, local, localtime, log, m//, 383 map, mkdir, my, next, no, oct, open, opendir, ord, pack, 384 pipe, pop, pos, print, printf, push, q//, qq//, qw//, 385 qx//*, quotemeta, rand, read, readdir, redo, ref, rename, 386 require, reset, return, reverse, rewinddir, rindex, 387 rmdir, s///, scalar, seek, seekdir, select(internal), 388 select (system call)*, setpwent, shift, sin, sleep, 389 sort, splice, split, sprintf, sqrt, srand, stat, 390 study, substr, sysread, system*, syswrite, tell, 391 telldir, tie, time, times*, tr///, uc, ucfirst, umask, 392 undef, unlink*, unpack, untie, unshift, use, utime*, 393 values, vec, wait, waitpid*, wantarray, warn, write, y/// 394 395The following functions were not implemented in the VMS port, 396and calling them produces a fatal error (usually) or 397undefined behavior (rarely, we hope): 398 399 chroot, dbmclose, dbmopen, flock, fork*, 400 getpgrp, getpriority, getgrent, getgrgid, 401 getgrnam, setgrent, endgrent, ioctl, link, lstat, 402 msgctl, msgget, msgsend, msgrcv, readlink, semctl, 403 semget, semop, setpgrp, setpriority, shmctl, shmget, 404 shmread, shmwrite, socketpair, symlink, syscall 405 406The following functions are available on Perls compiled with Dec C 4075.2 or greater and running VMS 7.0 or greater: 408 409 truncate 410 411The following functions are available on Perls built on VMS 7.2 or 412greater: 413 414 fcntl (without locking) 415 416The following functions may or may not be implemented, 417depending on what type of socket support you've built into 418your copy of Perl: 419 420 accept, bind, connect, getpeername, 421 gethostbyname, getnetbyname, getprotobyname, 422 getservbyname, gethostbyaddr, getnetbyaddr, 423 getprotobynumber, getservbyport, gethostent, 424 getnetent, getprotoent, getservent, sethostent, 425 setnetent, setprotoent, setservent, endhostent, 426 endnetent, endprotoent, endservent, getsockname, 427 getsockopt, listen, recv, select(system call)*, 428 send, setsockopt, shutdown, socket 429 430=over 4 431 432=item File tests 433 434The tests C<-b>, C<-B>, C<-c>, C<-C>, C<-d>, C<-e>, C<-f>, 435C<-o>, C<-M>, C<-s>, C<-S>, C<-t>, C<-T>, and C<-z> work as 436advertised. The return values for C<-r>, C<-w>, and C<-x> 437tell you whether you can actually access the file; this may 438not reflect the UIC-based file protections. Since real and 439effective UIC don't differ under VMS, C<-O>, C<-R>, C<-W>, 440and C<-X> are equivalent to C<-o>, C<-r>, C<-w>, and C<-x>. 441Similarly, several other tests, including C<-A>, C<-g>, C<-k>, 442C<-l>, C<-p>, and C<-u>, aren't particularly meaningful under 443VMS, and the values returned by these tests reflect whatever 444your CRTL C<stat()> routine does to the equivalent bits in the 445st_mode field. Finally, C<-d> returns true if passed a device 446specification without an explicit directory (e.g. C<DUA1:>), as 447well as if passed a directory. 448 449Note: Some sites have reported problems when using the file-access 450tests (C<-r>, C<-w>, and C<-x>) on files accessed via DEC's DFS. 451Specifically, since DFS does not currently provide access to the 452extended file header of files on remote volumes, attempts to 453examine the ACL fail, and the file tests will return false, 454with C<$!> indicating that the file does not exist. You can 455use C<stat> on these files, since that checks UIC-based protection 456only, and then manually check the appropriate bits, as defined by 457your C compiler's F<stat.h>, in the mode value it returns, if you 458need an approximation of the file's protections. 459 460=item backticks 461 462Backticks create a subprocess, and pass the enclosed string 463to it for execution as a DCL command. Since the subprocess is 464created directly via C<lib$spawn()>, any valid DCL command string 465may be specified. 466 467=item binmode FILEHANDLE 468 469The C<binmode> operator will attempt to insure that no translation 470of carriage control occurs on input from or output to this filehandle. 471Since this involves reopening the file and then restoring its 472file position indicator, if this function returns FALSE, the 473underlying filehandle may no longer point to an open file, or may 474point to a different position in the file than before C<binmode> 475was called. 476 477Note that C<binmode> is generally not necessary when using normal 478filehandles; it is provided so that you can control I/O to existing 479record-structured files when necessary. You can also use the 480C<vmsfopen> function in the VMS::Stdio extension to gain finer 481control of I/O to files and devices with different record structures. 482 483=item crypt PLAINTEXT, USER 484 485The C<crypt> operator uses the C<sys$hash_password> system 486service to generate the hashed representation of PLAINTEXT. 487If USER is a valid username, the algorithm and salt values 488are taken from that user's UAF record. If it is not, then 489the preferred algorithm and a salt of 0 are used. The 490quadword encrypted value is returned as an 8-character string. 491 492The value returned by C<crypt> may be compared against 493the encrypted password from the UAF returned by the C<getpw*> 494functions, in order to authenticate users. If you're 495going to do this, remember that the encrypted password in 496the UAF was generated using uppercase username and 497password strings; you'll have to upcase the arguments to 498C<crypt> to insure that you'll get the proper value: 499 500 sub validate_passwd { 501 my($user,$passwd) = @_; 502 my($pwdhash); 503 if ( !($pwdhash = (getpwnam($user))[1]) || 504 $pwdhash ne crypt("\U$passwd","\U$name") ) { 505 intruder_alert($name); 506 } 507 return 1; 508 } 509 510=item dump 511 512Rather than causing Perl to abort and dump core, the C<dump> 513operator invokes the VMS debugger. If you continue to 514execute the Perl program under the debugger, control will 515be transferred to the label specified as the argument to 516C<dump>, or, if no label was specified, back to the 517beginning of the program. All other state of the program 518(I<e.g.> values of variables, open file handles) are not 519affected by calling C<dump>. 520 521=item exec LIST 522 523A call to C<exec> will cause Perl to exit, and to invoke the command 524given as an argument to C<exec> via C<lib$do_command>. If the 525argument begins with '@' or '$' (other than as part of a filespec), 526then it is executed as a DCL command. Otherwise, the first token on 527the command line is treated as the filespec of an image to run, and 528an attempt is made to invoke it (using F<.Exe> and the process 529defaults to expand the filespec) and pass the rest of C<exec>'s 530argument to it as parameters. If the token has no file type, and 531matches a file with null type, then an attempt is made to determine 532whether the file is an executable image which should be invoked 533using C<MCR> or a text file which should be passed to DCL as a 534command procedure. 535 536=item fork 537 538While in principle the C<fork> operator could be implemented via 539(and with the same rather severe limitations as) the CRTL C<vfork()> 540routine, and while some internal support to do just that is in 541place, the implementation has never been completed, making C<fork> 542currently unavailable. A true kernel C<fork()> is expected in a 543future version of VMS, and the pseudo-fork based on interpreter 544threads may be available in a future version of Perl on VMS (see 545L<perlfork>). In the meantime, use C<system>, backticks, or piped 546filehandles to create subprocesses. 547 548=item getpwent 549 550=item getpwnam 551 552=item getpwuid 553 554These operators obtain the information described in L<perlfunc>, 555if you have the privileges necessary to retrieve the named user's 556UAF information via C<sys$getuai>. If not, then only the C<$name>, 557C<$uid>, and C<$gid> items are returned. The C<$dir> item contains 558the login directory in VMS syntax, while the C<$comment> item 559contains the login directory in Unix syntax. The C<$gcos> item 560contains the owner field from the UAF record. The C<$quota> 561item is not used. 562 563=item gmtime 564 565The C<gmtime> operator will function properly if you have a 566working CRTL C<gmtime()> routine, or if the logical name 567SYS$TIMEZONE_DIFFERENTIAL is defined as the number of seconds 568which must be added to UTC to yield local time. (This logical 569name is defined automatically if you are running a version of 570VMS with built-in UTC support.) If neither of these cases is 571true, a warning message is printed, and C<undef> is returned. 572 573=item kill 574 575In most cases, C<kill> is implemented via the CRTL's C<kill()> 576function, so it will behave according to that function's 577documentation. If you send a SIGKILL, however, the $DELPRC system 578service is called directly. This insures that the target 579process is actually deleted, if at all possible. (The CRTL's C<kill()> 580function is presently implemented via $FORCEX, which is ignored by 581supervisor-mode images like DCL.) 582 583Also, negative signal values don't do anything special under 584VMS; they're just converted to the corresponding positive value. 585 586=item qx// 587 588See the entry on C<backticks> above. 589 590=item select (system call) 591 592If Perl was not built with socket support, the system call 593version of C<select> is not available at all. If socket 594support is present, then the system call version of 595C<select> functions only for file descriptors attached 596to sockets. It will not provide information about regular 597files or pipes, since the CRTL C<select()> routine does not 598provide this functionality. 599 600=item stat EXPR 601 602Since VMS keeps track of files according to a different scheme 603than Unix, it's not really possible to represent the file's ID 604in the C<st_dev> and C<st_ino> fields of a C<struct stat>. Perl 605tries its best, though, and the values it uses are pretty unlikely 606to be the same for two different files. We can't guarantee this, 607though, so caveat scriptor. 608 609=item system LIST 610 611The C<system> operator creates a subprocess, and passes its 612arguments to the subprocess for execution as a DCL command. 613Since the subprocess is created directly via C<lib$spawn()>, any 614valid DCL command string may be specified. If the string begins with 615'@', it is treated as a DCL command unconditionally. Otherwise, if 616the first token contains a character used as a delimiter in file 617specification (e.g. C<:> or C<]>), an attempt is made to expand it 618using a default type of F<.Exe> and the process defaults, and if 619successful, the resulting file is invoked via C<MCR>. This allows you 620to invoke an image directly simply by passing the file specification 621to C<system>, a common Unixish idiom. If the token has no file type, 622and matches a file with null type, then an attempt is made to 623determine whether the file is an executable image which should be 624invoked using C<MCR> or a text file which should be passed to DCL 625as a command procedure. 626 627If LIST consists of the empty string, C<system> spawns an 628interactive DCL subprocess, in the same fashion as typing 629B<SPAWN> at the DCL prompt. 630 631Perl waits for the subprocess to complete before continuing 632execution in the current process. As described in L<perlfunc>, 633the return value of C<system> is a fake "status" which follows 634POSIX semantics unless the pragma C<use vmsish 'status'> is in 635effect; see the description of C<$?> in this document for more 636detail. 637 638=item time 639 640The value returned by C<time> is the offset in seconds from 64101-JAN-1970 00:00:00 (just like the CRTL's times() routine), in order 642to make life easier for code coming in from the POSIX/Unix world. 643 644=item times 645 646The array returned by the C<times> operator is divided up 647according to the same rules the CRTL C<times()> routine. 648Therefore, the "system time" elements will always be 0, since 649there is no difference between "user time" and "system" time 650under VMS, and the time accumulated by a subprocess may or may 651not appear separately in the "child time" field, depending on 652whether L<times> keeps track of subprocesses separately. Note 653especially that the VAXCRTL (at least) keeps track only of 654subprocesses spawned using L<fork> and L<exec>; it will not 655accumulate the times of subprocesses spawned via pipes, L<system>, 656or backticks. 657 658=item unlink LIST 659 660C<unlink> will delete the highest version of a file only; in 661order to delete all versions, you need to say 662 663 1 while unlink LIST; 664 665You may need to make this change to scripts written for a 666Unix system which expect that after a call to C<unlink>, 667no files with the names passed to C<unlink> will exist. 668(Note: This can be changed at compile time; if you 669C<use Config> and C<$Config{'d_unlink_all_versions'}> is 670C<define>, then C<unlink> will delete all versions of a 671file on the first call.) 672 673C<unlink> will delete a file if at all possible, even if it 674requires changing file protection (though it won't try to 675change the protection of the parent directory). You can tell 676whether you've got explicit delete access to a file by using the 677C<VMS::Filespec::candelete> operator. For instance, in order 678to delete only files to which you have delete access, you could 679say something like 680 681 sub safe_unlink { 682 my($file,$num); 683 foreach $file (@_) { 684 next unless VMS::Filespec::candelete($file); 685 $num += unlink $file; 686 } 687 $num; 688 } 689 690(or you could just use C<VMS::Stdio::remove>, if you've installed 691the VMS::Stdio extension distributed with Perl). If C<unlink> has to 692change the file protection to delete the file, and you interrupt it 693in midstream, the file may be left intact, but with a changed ACL 694allowing you delete access. 695 696=item utime LIST 697 698Since ODS-2, the VMS file structure for disk files, does not keep 699track of access times, this operator changes only the modification 700time of the file (VMS revision date). 701 702=item waitpid PID,FLAGS 703 704If PID is a subprocess started by a piped C<open()> (see L<open>), 705C<waitpid> will wait for that subprocess, and return its final status 706value in C<$?>. If PID is a subprocess created in some other way (e.g. 707SPAWNed before Perl was invoked), C<waitpid> will simply check once per 708second whether the process has completed, and return when it has. (If 709PID specifies a process that isn't a subprocess of the current process, 710and you invoked Perl with the C<-w> switch, a warning will be issued.) 711 712Returns PID on success, -1 on error. The FLAGS argument is ignored 713in all cases. 714 715=back 716 717=head1 Perl variables 718 719The following VMS-specific information applies to the indicated 720"special" Perl variables, in addition to the general information 721in L<perlvar>. Where there is a conflict, this information 722takes precedence. 723 724=over 4 725 726=item %ENV 727 728The operation of the C<%ENV> array depends on the translation 729of the logical name F<PERL_ENV_TABLES>. If defined, it should 730be a search list, each element of which specifies a location 731for C<%ENV> elements. If you tell Perl to read or set the 732element C<$ENV{>I<name>C<}>, then Perl uses the translations of 733F<PERL_ENV_TABLES> as follows: 734 735=over 4 736 737=item CRTL_ENV 738 739This string tells Perl to consult the CRTL's internal C<environ> 740array of key-value pairs, using I<name> as the key. In most cases, 741this contains only a few keys, but if Perl was invoked via the C 742C<exec[lv]e()> function, as is the case for CGI processing by some 743HTTP servers, then the C<environ> array may have been populated by 744the calling program. 745 746=item CLISYM_[LOCAL] 747 748A string beginning with C<CLISYM_>tells Perl to consult the CLI's 749symbol tables, using I<name> as the name of the symbol. When reading 750an element of C<%ENV>, the local symbol table is scanned first, followed 751by the global symbol table.. The characters following C<CLISYM_> are 752significant when an element of C<%ENV> is set or deleted: if the 753complete string is C<CLISYM_LOCAL>, the change is made in the local 754symbol table; otherwise the global symbol table is changed. 755 756=item Any other string 757 758If an element of F<PERL_ENV_TABLES> translates to any other string, 759that string is used as the name of a logical name table, which is 760consulted using I<name> as the logical name. The normal search 761order of access modes is used. 762 763=back 764 765F<PERL_ENV_TABLES> is translated once when Perl starts up; any changes 766you make while Perl is running do not affect the behavior of C<%ENV>. 767If F<PERL_ENV_TABLES> is not defined, then Perl defaults to consulting 768first the logical name tables specified by F<LNM$FILE_DEV>, and then 769the CRTL C<environ> array. 770 771In all operations on %ENV, the key string is treated as if it 772were entirely uppercase, regardless of the case actually 773specified in the Perl expression. 774 775When an element of C<%ENV> is read, the locations to which 776F<PERL_ENV_TABLES> points are checked in order, and the value 777obtained from the first successful lookup is returned. If the 778name of the C<%ENV> element contains a semi-colon, it and 779any characters after it are removed. These are ignored when 780the CRTL C<environ> array or a CLI symbol table is consulted. 781However, the name is looked up in a logical name table, the 782suffix after the semi-colon is treated as the translation index 783to be used for the lookup. This lets you look up successive values 784for search list logical names. For instance, if you say 785 786 $ Define STORY once,upon,a,time,there,was 787 $ perl -e "for ($i = 0; $i <= 6; $i++) " - 788 _$ -e "{ print $ENV{'story;'.$i},' '}" 789 790Perl will print C<ONCE UPON A TIME THERE WAS>, assuming, of course, 791that F<PERL_ENV_TABLES> is set up so that the logical name C<story> 792is found, rather than a CLI symbol or CRTL C<environ> element with 793the same name. 794 795When an element of C<%ENV> is set to a defined string, the 796corresponding definition is made in the location to which the 797first translation of F<PERL_ENV_TABLES> points. If this causes a 798logical name to be created, it is defined in supervisor mode. 799(The same is done if an existing logical name was defined in 800executive or kernel mode; an existing user or supervisor mode 801logical name is reset to the new value.) If the value is an empty 802string, the logical name's translation is defined as a single NUL 803(ASCII 00) character, since a logical name cannot translate to a 804zero-length string. (This restriction does not apply to CLI symbols 805or CRTL C<environ> values; they are set to the empty string.) 806An element of the CRTL C<environ> array can be set only if your 807copy of Perl knows about the CRTL's C<setenv()> function. (This is 808present only in some versions of the DECCRTL; check C<$Config{d_setenv}> 809to see whether your copy of Perl was built with a CRTL that has this 810function.) 811 812When an element of C<%ENV> is set to C<undef>, 813the element is looked up as if it were being read, and if it is 814found, it is deleted. (An item "deleted" from the CRTL C<environ> 815array is set to the empty string; this can only be done if your 816copy of Perl knows about the CRTL C<setenv()> function.) Using 817C<delete> to remove an element from C<%ENV> has a similar effect, 818but after the element is deleted, another attempt is made to 819look up the element, so an inner-mode logical name or a name in 820another location will replace the logical name just deleted. 821In either case, only the first value found searching PERL_ENV_TABLES 822is altered. It is not possible at present to define a search list 823logical name via %ENV. 824 825The element C<$ENV{DEFAULT}> is special: when read, it returns 826Perl's current default device and directory, and when set, it 827resets them, regardless of the definition of F<PERL_ENV_TABLES>. 828It cannot be cleared or deleted; attempts to do so are silently 829ignored. 830 831Note that if you want to pass on any elements of the 832C-local environ array to a subprocess which isn't 833started by fork/exec, or isn't running a C program, you 834can "promote" them to logical names in the current 835process, which will then be inherited by all subprocesses, 836by saying 837 838 foreach my $key (qw[C-local keys you want promoted]) { 839 my $temp = $ENV{$key}; # read from C-local array 840 $ENV{$key} = $temp; # and define as logical name 841 } 842 843(You can't just say C<$ENV{$key} = $ENV{$key}>, since the 844Perl optimizer is smart enough to elide the expression.) 845 846Don't try to clear C<%ENV> by saying C<%ENV = ();>, it will throw 847a fatal error. This is equivalent to doing the following from DCL: 848 849 DELETE/LOGICAL * 850 851You can imagine how bad things would be if, for example, the SYS$MANAGER 852or SYS$SYSTEM logicals were deleted. 853 854At present, the first time you iterate over %ENV using 855C<keys>, or C<values>, you will incur a time penalty as all 856logical names are read, in order to fully populate %ENV. 857Subsequent iterations will not reread logical names, so they 858won't be as slow, but they also won't reflect any changes 859to logical name tables caused by other programs. 860 861You do need to be careful with the logicals representing process-permanent 862files, such as C<SYS$INPUT> and C<SYS$OUTPUT>. The translations for these 863logicals are prepended with a two-byte binary value (0x1B 0x00) that needs to be 864stripped off if you want to use it. (In previous versions of Perl it wasn't 865possible to get the values of these logicals, as the null byte acted as an 866end-of-string marker) 867 868=item $! 869 870The string value of C<$!> is that returned by the CRTL's 871strerror() function, so it will include the VMS message for 872VMS-specific errors. The numeric value of C<$!> is the 873value of C<errno>, except if errno is EVMSERR, in which 874case C<$!> contains the value of vaxc$errno. Setting C<$!> 875always sets errno to the value specified. If this value is 876EVMSERR, it also sets vaxc$errno to 4 (NONAME-F-NOMSG), so 877that the string value of C<$!> won't reflect the VMS error 878message from before C<$!> was set. 879 880=item $^E 881 882This variable provides direct access to VMS status values 883in vaxc$errno, which are often more specific than the 884generic Unix-style error messages in C<$!>. Its numeric value 885is the value of vaxc$errno, and its string value is the 886corresponding VMS message string, as retrieved by sys$getmsg(). 887Setting C<$^E> sets vaxc$errno to the value specified. 888 889=item $? 890 891The "status value" returned in C<$?> is synthesized from the 892actual exit status of the subprocess in a way that approximates 893POSIX wait(5) semantics, in order to allow Perl programs to 894portably test for successful completion of subprocesses. The 895low order 8 bits of C<$?> are always 0 under VMS, since the 896termination status of a process may or may not have been 897generated by an exception. The next 8 bits are derived from 898the severity portion of the subprocess' exit status: if the 899severity was success or informational, these bits are all 0; 900if the severity was warning, they contain a value of 1; if the 901severity was error or fatal error, they contain the actual 902severity bits, which turns out to be a value of 2 for error 903and 4 for fatal error. 904 905As a result, C<$?> will always be zero if the subprocess' exit 906status indicated successful completion, and non-zero if a 907warning or error occurred. Conversely, when setting C<$?> in 908an END block, an attempt is made to convert the POSIX value 909into a native status intelligible to the operating system upon 910exiting Perl. What this boils down to is that setting C<$?> 911to zero results in the generic success value SS$_NORMAL, and 912setting C<$?> to a non-zero value results in the generic 913failure status SS$_ABORT. See also L<perlport/exit>. 914 915The pragma C<use vmsish 'status'> makes C<$?> reflect the actual 916VMS exit status instead of the default emulation of POSIX status 917described above. This pragma also disables the conversion of 918non-zero values to SS$_ABORT when setting C<$?> in an END 919block (but zero will still be converted to SS$_NORMAL). 920 921=item $| 922 923Setting C<$|> for an I/O stream causes data to be flushed 924all the way to disk on each write (I<i.e.> not just to 925the underlying RMS buffers for a file). In other words, 926it's equivalent to calling fflush() and fsync() from C. 927 928=back 929 930=head1 Standard modules with VMS-specific differences 931 932=head2 SDBM_File 933 934SDBM_File works properly on VMS. It has, however, one minor 935difference. The database directory file created has a F<.sdbm_dir> 936extension rather than a F<.dir> extension. F<.dir> files are VMS filesystem 937directory files, and using them for other purposes could cause unacceptable 938problems. 939 940=head1 Revision date 941 942This document was last updated on 01-May-2002, for Perl 5, 943patchlevel 8. 944 945=head1 AUTHOR 946 947Charles Bailey bailey@cor.newman.upenn.edu 948Craig Berry craigberry@mac.com 949Dan Sugalski dan@sidhe.org 950