X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=vms%2Fperlvms.pod;h=c4f6aca5764408c3f3b61459996a42d3b23ee1d5;hb=cb5772bbb31a56af73775120008b21214f3fccb5;hp=c09e0471691bff09a37e55c2da2c2e3c7b8148ad;hpb=35b2760ac6eea1581f6fe2a3565b2105801fc51a;p=p5sagit%2Fp5-mst-13.2.git diff --git a/vms/perlvms.pod b/vms/perlvms.pod index c09e047..c4f6aca 100644 --- a/vms/perlvms.pod +++ b/vms/perlvms.pod @@ -121,8 +121,9 @@ directory, and the procedure for building the extension is simply I The procedure by which extensions are built and tested creates several levels (at least 4) under the directory in which the extension's source files live. -For this reason, you shouldn't nest the source directory -too deeply in your directory structure, lest you exceed RMS' +For this reason if you are running a version of VMS prior +to V7.1 you shouldn't nest the source directory +too deeply in your directory structure lest you exceed RMS' maximum of 8 levels of subdirectory in a filespec. (You can use rooted logical names to get another 8 levels of nesting, if you can't place the files near the top of @@ -139,22 +140,39 @@ the Perl extension, then the line C must be added to the linker options file F produced during the build process for the Perl extension. -By default, the shareable image for an extension is placed -F<[.lib.site_perl.auto>I.IF<]> directory of the +By default, the shareable image for an extension is placed in +the F<[.lib.site_perl.auto>I.IF<]> directory of the installed Perl directory tree (where I is F or F, and I is the name of the extension, with each C<::> translated to C<.>). (See the MakeMaker documentation for more details on installation options for extensions.) However, it can be manually placed in any of several locations: - - the F<[.Lib.Auto.>II<$PVers>IF<]> subdirectory - of one of the directories in C<@INC> (where I - is the version of Perl you're using, as supplied in C<$]>, - with '.' converted to '_'), or - - one of the directories in C<@INC>, or - - a directory which the extensions Perl library module - passes to the DynaLoader when asking it to map - the shareable image, or - - F or F. + +=over 4 + +=item * + +the F<[.Lib.Auto.>II<$PVers>IF<]> subdirectory +of one of the directories in C<@INC> (where I +is the version of Perl you're using, as supplied in C<$]>, +with '.' converted to '_'), or + +=item * + +one of the directories in C<@INC>, or + +=item * + +a directory which the extensions Perl library module +passes to the DynaLoader when asking it to map +the shareable image, or + +=item * + +F or F. + +=back + If the shareable image isn't in any of these places, you'll need to define a logical name I, where I is the portion of the extension's name after the last C<::>, which @@ -194,12 +212,28 @@ so we can try to work around them. =head2 Wildcard expansion File specifications containing wildcards are allowed both on -the command line and within Perl globs (e.g. *.cE>). If +the command line and within Perl globs (e.g. C*.cE>). If the wildcard filespec uses VMS syntax, the resultant filespecs will follow VMS syntax; if a Unix-style filespec is passed in, Unix-style filespecs will be returned. +Similar to the behavior of wildcard globbing for a Unix shell, +one can escape command line wildcards with double quotation +marks C<"> around a perl program command line argument. However, +owing to the stripping of C<"> characters carried out by the C +handling of argv you will need to escape a construct such as +this one (in a directory containing the files F, F, +F, and F): + + $ perl -e "print join(' ',@ARGV)" perl.* + perl.c perl.exe perl.h perl.obj -In both cases, VMS wildcard expansion is performed. (csh-style +in the following triple quoted manner: + + $ perl -e "print join(' ',@ARGV)" """perl.*""" + perl.* + +In both the case of unquoted command line arguments or in calls +to C VMS wildcard expansion is performed. (csh-style wildcard expansion is available if you use C.) If the wildcard filespec contains a device or directory specification, then the resultant filespecs will also contain @@ -231,6 +265,20 @@ string between the backticks is handled as if it were the argument to the C operator (see below). In this case, Perl will wait for the subprocess to complete before continuing. +The mailbox (MBX) that perl can create to communicate with a pipe +defaults to a buffer size of 512. The default buffer size is +adjustable via the logical name PERL_MBX_SIZE provided that the +value falls between 128 and the SYSGEN parameter MAXBUF inclusive. +For example, to double the MBX size from the default within +a Perl program, use C<$ENV{'PERL_MBX_SIZE'} = 1024;> and then +open and use pipe constructs. An alternative would be to issue +the command: + + $ Define PERL_MBX_SIZE 1024 + +before running your wide record pipe program. A larger value may +improve performance at the expense of the BYTLM UAF quota. + =head1 PERL5LIB and PERLLIB The PERL5LIB and PERLLIB logical names work as documented in L, @@ -244,11 +292,33 @@ directory specifications may use either VMS or Unix syntax. Perl for VMS supports redirection of input and output on the command line, using a subset of Bourne shell syntax: - reads stdin from F, - >F writes stdout to F, - >>F appends stdout to F, - 2>F writes stderr to F, and - 2>>F appends stderr to F. +=over 4 + +=item * + +Cfile> reads stdin from C, + +=item * + +Cfile> writes stdout to C, + +=item * + +CEfile> appends stdout to C, + +=item * + +C<2Efile> writes stderr to C, + +=item * + +C<2EEfile> appends stderr to C, and + +=item * + +C<< 2>&1 >> redirects stderr to stdout. + +=back In addition, output may be piped to a subprocess, using the character '|'. Anything after this character on the command @@ -280,10 +350,10 @@ not remain as a previous version under the original filename.) =item -S -If the C<-S> switch is present I the script name does -not contain a directory, then Perl translates the logical -name DCL$PATH as a searchlist, using each translation as -a directory in which to look for the script. In addition, +If the C<"-S"> or C<-"S"> switch is present I the script +name does not contain a directory, then Perl translates the +logical name DCL$PATH as a searchlist, using each translation +as a directory in which to look for the script. In addition, if no file type is specified, Perl looks in each directory for a file matching the name specified, with a blank type, a type of F<.pl>, and a type of F<.com>, in that order. @@ -306,7 +376,7 @@ Perl functions were implemented in the VMS port of Perl caller, chdir, chmod, chown, chomp, chop, chr, close, closedir, cos, crypt*, defined, delete, die, do, dump*, each, endpwent, eof, eval, exec*, - exists, exit, exp, fileno, fork*, getc, getlogin, + exists, exit, exp, fileno, getc, getlogin, getppid, getpwent*, getpwnam*, getpwuid*, glob, gmtime*, goto, grep, hex, import, index, int, join, keys, kill*, last, lc, lcfirst, length, local, localtime, log, m//, @@ -326,8 +396,8 @@ The following functions were not implemented in the VMS port, and calling them produces a fatal error (usually) or undefined behavior (rarely, we hope): - chroot, dbmclose, dbmopen, flock, - getpgrp, getppid, getpriority, getgrent, getgrgid, + chroot, dbmclose, dbmopen, flock, fork*, + getpgrp, getpriority, getgrent, getgrgid, getgrnam, setgrent, endgrent, ioctl, link, lstat, msgctl, msgget, msgsend, msgrcv, readlink, semctl, semget, semop, setpgrp, setpriority, shmctl, shmget, @@ -427,15 +497,15 @@ the UAF was generated using uppercase username and password strings; you'll have to upcase the arguments to C to insure that you'll get the proper value: - sub validate_passwd { - my($user,$passwd) = @_; - my($pwdhash); - if ( !($pwdhash = (getpwnam($user))[1]) || - $pwdhash ne crypt("\U$passwd","\U$name") ) { - intruder_alert($name); + sub validate_passwd { + my($user,$passwd) = @_; + my($pwdhash); + if ( !($pwdhash = (getpwnam($user))[1]) || + $pwdhash ne crypt("\U$passwd","\U$name") ) { + intruder_alert($name); + } + return 1; } - return 1; - } =item dump @@ -450,49 +520,30 @@ affected by calling C. =item exec LIST -The C operator behaves in one of two different ways. -If called after a call to C, it will invoke the CRTL -C routine, passing its arguments to the subprocess -created by C for execution. In this case, it is -subject to all limitations that affect C. (In -particular, this usually means that the command executed in -the subprocess must be an image compiled from C source code, -and that your options for passing file descriptors and signal -handlers to the subprocess are limited.) - -If the call to C does not follow a call to C, it -will cause Perl to exit, and to invoke the command given as -an argument to C via C. If the argument -begins with '@' or '$' (other than as part of a filespec), then it -is executed as a DCL command. Otherwise, the first token on -the command line is treated as the filespec of an image to -run, and an attempt is made to invoke it (using F<.Exe> and -the process defaults to expand the filespec) and pass the -rest of C's argument to it as parameters. If the token -has no file type, and matches a file with null type, then an -attempt is made to determine whether the file is an executable -image which should be invoked using C or a text file which -should be passed to DCL as a command procedure. - -You can use C in both ways within the same script, as -long as you call C and C in pairs. Perl -keeps track of how many times C and C have been -called, and will call the CRTL C routine if there have -previously been more calls to C than to C. +A call to C will cause Perl to exit, and to invoke the command +given as an argument to C via C. If the +argument begins with '@' or '$' (other than as part of a filespec), +then it is executed as a DCL command. Otherwise, the first token on +the command line is treated as the filespec of an image to run, and +an attempt is made to invoke it (using F<.Exe> and the process +defaults to expand the filespec) and pass the rest of C's +argument to it as parameters. If the token has no file type, and +matches a file with null type, then an attempt is made to determine +whether the file is an executable image which should be invoked +using C or a text file which should be passed to DCL as a +command procedure. =item fork -The C operator works in the same way as the CRTL -C routine, which is quite different under VMS than -under Unix. Specifically, while C returns 0 after it -is called and the subprocess PID after C is called, in -both cases the thread of execution is within the parent -process, so there is no opportunity to perform operations in -the subprocess before calling C. - -In general, the use of C and C to create -subprocesses is not recommended under VMS; wherever possible, -use the C operator or piped filehandles instead. +While in principle the C operator could be implemented via +(and with the same rather severe limitations as) the CRTL C +routine, and while some internal support to do just that is in +place, the implementation has never been completed, making C +currently unavailable. A true kernel C is expected in a +future version of VMS, and the pseudo-fork based on interpreter +threads may be available in a future version of Perl on VMS (see +L). In the meantime, use C, backticks, or piped +filehandles to create subprocesses. =item getpwent @@ -651,17 +702,12 @@ time of the file (VMS revision date). =item waitpid PID,FLAGS If PID is a subprocess started by a piped C (see L), -C will wait for that subprocess, and return its final -status value in C<$?>. If PID is a subprocess created in some other -way (e.g. SPAWNed before Perl was invoked), or is not a subprocess -of the current process, C will attempt to read from the -process's termination mailbox, making the final status available in -C<$?> when the process completes. If the process specified by PID -has no termination mailbox, C will simply check once per -second whether the process has completed, and return when it has. -(If PID specifies a process that isn't a subprocess of the current -process, and you invoked Perl with the C<-w> switch, a warning will -be issued.) +C will wait for that subprocess, and return its final status +value in C<$?>. If PID is a subprocess created in some other way (e.g. +SPAWNed before Perl was invoked), C will simply check once per +second whether the process has completed, and return when it has. (If +PID specifies a process that isn't a subprocess of the current process, +and you invoked Perl with the C<-w> switch, a warning will be issued.) Returns PID on success, -1 on error. The FLAGS argument is ignored in all cases. @@ -790,8 +836,8 @@ process, which will then be inherited by all subprocesses, by saying foreach my $key (qw[C-local keys you want promoted]) { - my $temp = $ENV{$key}; # read from C-local array - $ENV{$key} = $temp; # and define as logical name + my $temp = $ENV{$key}; # read from C-local array + $ENV{$key} = $temp; # and define as logical name } (You can't just say C<$ENV{$key} = $ENV{$key}>, since the @@ -893,11 +939,11 @@ problems. =head1 Revision date -This document was last updated on 2-Oct-2001, for Perl 5, +This document was last updated on 01-May-2002, for Perl 5, patchlevel 8. =head1 AUTHOR -Charles Bailey -Craig Berry -Dan Sugalski +Charles Bailey bailey@cor.newman.upenn.edu +Craig Berry craigberry@mac.com +Dan Sugalski dan@sidhe.org