PERLFUNC(1)      Perl Programmers Reference Guide     PERLFUNC(1)

NNAAMMEE
       perlfunc - Perl builtin functions

DDEESSCCRRIIPPTTIIOONN
       The functions in this section can serve as terms in an
       expression.  They fall into two major categories: list
       operators and named unary operators.  These differ in
       their precedence relationship with a following comma.
       (See the precedence table in the perlop manpage.)  List
       operators take more than one argument, while unary
       operators can never take more than one argument.  Thus, a
       comma terminates the argument of a unary operator, but
       merely separates the arguments of a list operator.  A
       unary operator generally provides a scalar context to its
       argument, while a list operator may provide either scalar
       or list contexts for its arguments.  If it does both, the
       scalar arguments will be first, and the list argument will
       follow.  (Note that there can ever be only one such list
       argument.)  For instance, splice() has three scalar
       arguments followed by a list, whereas gethostbyname() has
       four scalar arguments.

       In the syntax descriptions that follow, list operators
       that expect a list (and provide list context for the
       elements of the list) are shown with LIST as an argument.
       Such a list may consist of any combination of scalar
       arguments or list values; the list values will be included
       in the list as if each individual element were
       interpolated at that point in the list, forming a longer
       single-dimensional list value.  Elements of the LIST
       should be separated by commas.

       Any function in the list below may be used either with or
       without parentheses around its arguments.  (The syntax
       descriptions omit the parentheses.)  If you use the
       parentheses, the simple (but occasionally surprising) rule
       is this: It LOOKS like a function, therefore it IS a
       function, and precedence doesn't matter.  Otherwise it's a
       list operator or unary operator, and precedence does
       matter.  And whitespace between the function and left
       parenthesis doesn't count--so you need to be careful
       sometimes:

           print 1+2+4;        # Prints 7.
           print(1+2) + 4;     # Prints 3.
           print (1+2)+4;      # Also prints 3!
           print +(1+2)+4;     # Prints 7.
           print ((1+2)+4);    # Prints 7.

       If you run Perl with the --ww switch it can warn you about
       this.  For example, the third line above produces:

           print (...) interpreted as function at - line 1.
           Useless use of integer addition in void context at - line 1.

       A few functions take no arguments at all, and therefore
       work as neither unary nor list operators.  These include
       such functions as time and endpwent.  For example,
       time+86_400 always means time() + 86_400.

       For functions that can be used in either a scalar or list
       context, nonabortive failure is generally indicated in a
       scalar context by returning the undefined value, and in a
       list context by returning the null list.

       Remember the following important rule: There is nnoo rruullee
       that relates the behavior of an expression in list context
       to its behavior in scalar context, or vice versa.  It
       might do two totally different things.  Each operator and
       function decides which sort of value it would be most
       appropriate to return in scalar context.  Some operators
       return the length of the list that would have been
       returned in list context.  Some operators return the first
       value in the list.  Some operators return the last value
       in the list.  Some operators return a count of successful
       operations.  In general, they do what you want, unless you
       want consistency.

       An named array in scalar context is quite different from
       what would at first glance appear to be a list in scalar
       context.  You can't get a list like (1,2,3) into being in
       scalar context, because the compiler knows the context at
       compile time.  It would generate the scalar comma operator
       there, not the list construction version of the comma.
       That means it was never a list to start with.

       In general, functions in Perl that serve as wrappers for
       system calls of the same name (like chown(2), fork(2),
       closedir(2), etc.) all return true when they succeed and
       undef otherwise, as is usually mentioned in the
       descriptions below.  This is different from the C
       interfaces, which return -1 on failure.  Exceptions to
       this rule are wait(), waitpid(), and syscall().  System
       calls also set the special $!  variable on failure.  Other
       functions do not, except accidentally.

       PPeerrll FFuunnccttiioonnss bbyy CCaatteeggoorryy

       Here are Perl's functions (including things that look like
       functions, like some keywords and named operators)
       arranged by category.  Some functions appear in more than
       one place.

       Functions for SCALARs or strings
            chomp, chop, chr, crypt, hex, index, lc, lcfirst,
            length, oct, ord, pack, q/STRING/, qq/STRING/,
            reverse, rindex, sprintf, substr, tr///, uc, ucfirst,
            y///

       Regular expressions and pattern matching
            m//, pos, quotemeta, s///, split, study, qr//

       Numeric functions
            abs, atan2, cos, exp, hex, int, log, oct, rand, sin,
            sqrt, srand

       Functions for real @ARRAYs
            pop, push, shift, splice, unshift

       Functions for list data
            grep, join, map, qw/STRING/, reverse, sort, unpack

       Functions for real %HASHes
            delete, each, exists, keys, values

       Input and output functions
            binmode, close, closedir, dbmclose, dbmopen, die,
            eof, fileno, flock, format, getc, print, printf,
            read, readdir, rewinddir, seek, seekdir, select,
            syscall, sysread, sysseek, syswrite, tell, telldir,
            truncate, warn, write

       Functions for fixed length data or records
            pack, read, syscall, sysread, syswrite, unpack, vec

       Functions for filehandles, files, or directories
            -X, chdir, chmod, chown, chroot, fcntl, glob, ioctl,
            link, lstat, mkdir, open, opendir, readlink, rename,
            rmdir, stat, symlink, umask, unlink, utime

       Keywords related to the control flow of your perl program
            caller, continue, die, do, dump, eval, exit, goto,
            last, next, redo, return, sub, wantarray

       Keywords related to scoping
            caller, import, local, my, package, use

       Miscellaneous functions
            defined, dump, eval, formline, local, my, reset,
            scalar, undef, wantarray

       Functions for processes and process groups
            alarm, exec, fork, getpgrp, getppid, getpriority,
            kill, pipe, qx/STRING/, setpgrp, setpriority, sleep,
            system, times, wait, waitpid

       Keywords related to perl modules
            do, import, no, package, require, use

       Keywords related to classes and object-orientedness
            bless, dbmclose, dbmopen, package, ref, tie, tied,
            untie, use

       Low-level socket functions
            accept, bind, connect, getpeername, getsockname,
            getsockopt, listen, recv, send, setsockopt, shutdown,
            socket, socketpair

       System V interprocess communication functions
            msgctl, msgget, msgrcv, msgsnd, semctl, semget,
            semop, shmctl, shmget, shmread, shmwrite

       Fetching user and group info
            endgrent, endhostent, endnetent, endpwent, getgrent,
            getgrgid, getgrnam, getlogin, getpwent, getpwnam,
            getpwuid, setgrent, setpwent

       Fetching network info
            endprotoent, endservent, gethostbyaddr,
            gethostbyname, gethostent, getnetbyaddr,
            getnetbyname, getnetent, getprotobyname,
            getprotobynumber, getprotoent, getservbyname,
            getservbyport, getservent, sethostent, setnetent,
            setprotoent, setservent

       Time-related functions
            gmtime, localtime, time, times

       Functions new in perl5
            abs, bless, chomp, chr, exists, formline, glob,
            import, lc, lcfirst, map, my, no, prototype, qx, qw,
            readline, readpipe, ref, sub*, sysopen, tie, tied,
            uc, ucfirst, untie, use

            * - sub was a keyword in perl4, but in perl5 it is an
            operator, which can be used in expressions.

       Functions obsoleted in perl5
            dbmclose, dbmopen

       PPoorrttaabbiilliittyy

       Perl was born in Unix and can therefore access all common
       Unix system calls.  In non-Unix environments, the
       functionality of some Unix system calls may not be
       available, or details of the available functionality may
       differ slightly.  The Perl functions affected by this are:

       -X, binmode, chmod, chown, chroot, crypt, dbmclose,
       dbmopen, dump, endgrent, endhostent, endnetent,
       endprotoent, endpwent, endservent, exec, fcntl, flock,
       fork, getgrent, getgrgid, gethostent, getlogin,
       getnetbyaddr, getnetbyname, getnetent, getppid, getprgp,
       getpriority, getprotobynumber, getprotoent, getpwent,
       getpwnam, getpwuid, getservbyport, getservent, getsockopt,
       glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv,
       msgsnd, open, pipe, readlink, rename, select, semctl,
       semget, semop, setgrent, sethostent, setnetent, setpgrp,
       setpriority, setprotoent, setpwent, setservent,
       setsockopt, shmctl, shmget, shmread, shmwrite, socket,
       socketpair, stat, symlink, syscall, sysopen, system,
       times, truncate, umask, unlink, utime, wait, waitpid

       For more information about the portability of these
       functions, see the perlport manpage and other available
       platform-specific documentation.

       AAllpphhaabbeettiiccaall LLiissttiinngg ooff PPeerrll FFuunnccttiioonnss

       -X FILEHANDLE

       -X EXPR

       -X      A file test, where X is one of the letters listed
               below.  This unary operator takes one argument,
               either a filename or a filehandle, and tests the
               associated file to see if something is true about
               it.  If the argument is omitted, tests $_, except
               for -t, which tests STDIN.  Unless otherwise
               documented, it returns 1 for TRUE and '' for
               FALSE, or the undefined value if the file doesn't
               exist.  Despite the funny names, precedence is the
               same as any other named unary operator, and the
               argument may be parenthesized like any other unary
               operator.  The operator may be any of:

                   -r  File is readable by effective uid/gid.
                   -w  File is writable by effective uid/gid.
                   -x  File is executable by effective uid/gid.
                   -o  File is owned by effective uid.

                   -R  File is readable by real uid/gid.
                   -W  File is writable by real uid/gid.
                   -X  File is executable by real uid/gid.
                   -O  File is owned by real uid.

                   -e  File exists.
                   -z  File has zero size.
                   -s  File has nonzero size (returns size).

                   -f  File is a plain file.
                   -d  File is a directory.
                   -l  File is a symbolic link.
                   -p  File is a named pipe (FIFO), or Filehandle is a pipe.
                   -S  File is a socket.
                   -b  File is a block special file.
                   -c  File is a character special file.
                   -t  Filehandle is opened to a tty.

                   -u  File has setuid bit set.
                   -g  File has setgid bit set.
                   -k  File has sticky bit set.

                   -T  File is a text file.
                   -B  File is a binary file (opposite of -T).

                   -M  Age of file in days when script started.
                   -A  Same for access time.
                   -C  Same for inode change time.

               Example:

                   while (<>) {
                       chop;
                       next unless -f $_;      # ignore specials
                       #...
                   }

               The interpretation of the file permission
               operators -r, -R, -w, -W, -x, and -X is by default
               based solely on the mode of the file and the uids
               and gids of the user.  There may be other reasons
               you can't actually read, write, or execute the
               file.  Such reasons may be for example network
               filesystem access controls, ACLs (access control
               lists), read-only filesystems, and unrecognized
               executable formats.

               Also note that, for the superuser on the local
               filesystems, the -r, -R, -w, and -W tests always
               return 1, and -x and -X return 1 if any execute
               bit is set in the mode.  Scripts run by the
               superuser may thus need to do a stat() to
               determine the actual mode of the file, or
               temporarily set their effective uid to something
               else.

               Note that -s/a/b/ does not do a negated
               substitution.  Saying -exp($foo) still works as
               expected, however--only single letters following a
               minus are interpreted as file tests.

               The -T and -B switches work as follows.  The first
               block or so of the file is examined for odd
               characters such as strange control codes or
               characters with the high bit set.  If too many
               strange characters (>30%) are found, it's a -B
               file, otherwise it's a -T file.  Also, any file
               containing null in the first block is considered a
               binary file.  If -T or -B is used on a filehandle,
               the current stdio buffer is examined rather than
               the first block.  Both -T and -B return TRUE on a
               null file, or a file at EOF when testing a
               filehandle.  Because you have to read a file to do
               the -T test, on most occasions you want to use a
               -f against the file first, as in next unless -f
               $file && -T $file.

               If any of the file tests (or either the stat() or
               lstat() operators) are given the special
               filehandle consisting of a solitary underline,
               then the stat structure of the previous file test
               (or stat operator) is used, saving a system call.
               (This doesn't work with -t, and you need to
               remember that lstat() and -l will leave values in
               the stat structure for the symbolic link, not the
               real file.)  Example:

                   print "Can do.\n" if -r $a || -w _ || -x _;

                   stat($filename);
                   print "Readable\n" if -r _;
                   print "Writable\n" if -w _;
                   print "Executable\n" if -x _;
                   print "Setuid\n" if -u _;
                   print "Setgid\n" if -g _;
                   print "Sticky\n" if -k _;
                   print "Text\n" if -T _;
                   print "Binary\n" if -B _;

       abs VALUE

       abs     Returns the absolute value of its argument.  If
               VALUE is omitted, uses $_.

       accept NEWSOCKET,GENERICSOCKET
               Accepts an incoming socket connect, just as the
               accept(2) system call does.  Returns the packed
               address if it succeeded, FALSE otherwise.  See the
               example in the section on Sockets: Client/Server
               Communication in the perlipc manpage.

       alarm SECONDS

       alarm   Arranges to have a SIGALRM delivered to this
               process after the specified number of seconds have
               elapsed.  If SECONDS is not specified, the value
               stored in $_ is used. (On some machines,
               unfortunately, the elapsed time may be up to one
               second less than you specified because of how
               seconds are counted.)  Only one timer may be
               counting at once.  Each call disables the previous
               timer, and an argument of 0 may be supplied to
               cancel the previous timer without starting a new
               one.  The returned value is the amount of time
               remaining on the previous timer.

               For delays of finer granularity than one second,
               you may use Perl's four-arugment version of
               select() leaving the first three arguments
               undefined, or you might be able to use the
               syscall() interface to access setitimer(2) if your
               system supports it.  The Time::HiRes module from
               CPAN may also prove useful.

               It is usually a mistake to intermix alarm() and
               sleep() calls.

               If you want to use alarm() to time out a system
               call you need to use an eval()/die() pair.  You
               can't rely on the alarm causing the system call to
               fail with $! set to EINTR because Perl sets up
               signal handlers to restart system calls on some
               systems.  Using eval()/die() always works, modulo
               the caveats given in the section on Signals in the
               perlipc manpage.

                   eval {
                       local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
                       alarm $timeout;
                       $nread = sysread SOCKET, $buffer, $size;
                       alarm 0;
                   };
                   if ($@) {
                       die unless $@ eq "alarm\n";   # propagate unexpected errors
                       # timed out
                   }
                   else {
                       # didn't
                   }

       atan2 Y,X
               Returns the arctangent of Y/X in the range -pi to
               pi.

               For the tangent operation, you may use the
               POSIX::tan() function, or use the familiar
               relation:

                   sub tan { sin($_[0]) / cos($_[0])  }

       bind SOCKET,NAME
               Binds a network address to a socket, just as the
               bind system call does.  Returns TRUE if it
               succeeded, FALSE otherwise.  NAME should be a
               packed address of the appropriate type for the
               socket.  See the examples in the section on
               Sockets: Client/Server Communication in the
               perlipc manpage.

       binmode FILEHANDLE
               Arranges for the file to be read or written in
               "binary" mode in operating systems that
               distinguish between binary and text files.  Files
               that are not in binary mode have CR LF sequences
               translated to LF on input and LF translated to CR
               LF on output.  Binmode has no effect under many
               sytems, but in MS-DOS and similarly archaic
               systems, it may be imperative--otherwise your
               MS-DOS-damaged C library may mangle your file.
               The key distinction between systems that need
               binmode() and those that don't is their text file
               formats.  Systems like Unix, MacOS, and Plan9 that
               delimit lines with a single character, and that
               encode that character in C as "\n", do not need
               binmode().  The rest may need it.  If FILEHANDLE
               is an expression, the value is taken as the name
               of the filehandle.

               If the system does care about it, using it when
               you shouldn't is just as perilous as failing to
               use it when you should.  Fortunately for most of
               us, you can't go wrong using binmode() on systems
               that don't care about it, though.

       bless REF,CLASSNAME

       bless REF
               This function tells the thingy referenced by REF
               that it is now an object in the CLASSNAME package.
               If CLASSNAME is omitted, the current package is
               used.  Because a bless() is often the last thing
               in a constructor.  it returns the reference for
               convenience.  Always use the two-argument version
               if the function doing the blessing might be
               inherited by a derived class.  See the perltoot
               manpage and the perlobj manpage for more about the
               blessing (and blessings) of objects.

               Consider always blessing objects in CLASSNAMEs
               that are mixed case.  Namespaces with all
               lowercase names are considered reserved for Perl
               pragmata.  Builtin types have all uppercase names,
               so to prevent confusion, you may wish to avoid
               such package names as well.  Make sure that
               CLASSNAME is a true value.

               See the section on Perl Modules in the perlmod
               manpage.

       caller EXPR

       caller  Returns the context of the current subroutine
               call.  In scalar context, returns the caller's
               package name if there is a caller, that is, if
               we're in a subroutine or eval() or require(), and
               the undefined value otherwise.  In list context,
               returns

                   ($package, $filename, $line) = caller;

               With EXPR, it returns some extra information that
               the debugger uses to print a stack trace.  The
               value of EXPR indicates how many call frames to go
               back before the current one.

                   ($package, $filename, $line, $subroutine,
                    $hasargs, $wantarray, $evaltext, $is_require) = caller($i);

               Here $subroutine may be "(eval)" if the frame is
               not a subroutine call, but an eval().  In such a
               case additional elements $evaltext and $is_require
               are set: $is_require is true if the frame is
               created by a require or use statement, $evaltext
               contains the text of the eval EXPR statement.  In
               particular, for a eval BLOCK statement, $filename
               is "(eval)", but $evaltext is undefined.  (Note
               also that each use statement creates a require
               frame inside an eval EXPR) frame.

               Furthermore, when called from within the DB
               package, caller returns more detailed information:
               it sets the list variable @DB::args to be the
               arguments with which the subroutine was invoked.

               Be aware that the optimizer might have optimized
               call frames away before caller() had a chance to
               get the information. That means that caller(N)
               might not return information about the call frame
               you expect it do, for N > 1. In particular,
               @DB::args might have information from the previous
               time caller() was called.

       chdir EXPR
               Changes the working directory to EXPR, if
               possible.  If EXPR is omitted, changes to the
               user's home directory.  Returns TRUE upon success,
               FALSE otherwise.  See the example under die().

       chmod LIST
               Changes the permissions of a list of files.  The
               first element of the list must be the numerical
               mode, which should probably be an octal number,
               and which definitely should not a string of octal
               digits: 0644 is okay, '0644' is not.  Returns the
               number of files successfully changed.  See also
               the oct entry elsewhere in this documentif all you
               have is a string.

                   $cnt = chmod 0755, 'foo', 'bar';
                   chmod 0755, @executables;
                   $mode = '0644'; chmod $mode, 'foo';      # !!! sets mode to
                                                            # --w----r-T
                   $mode = '0644'; chmod oct($mode), 'foo'; # this is better
                   $mode = 0644;   chmod $mode, 'foo';      # this is best

       chomp VARIABLE

       chomp LIST

       chomp   This safer version of the chop entry elsewhere in
               this documentremoves any trailing string that
               corresponds to the current value of $/ (also known
               as $INPUT_RECORD_SEPARATOR in the English module).
               It returns the total number of characters removed
               from all its arguments.  It's often used to remove
               the newline from the end of an input record when
               you're worried that the final record may be
               missing its newline.  When in paragraph mode ($/ =
               ""), it removes all trailing newlines from the
               string.  If VARIABLE is omitted, it chomps $_.
               Example:

                   while (<>) {
                       chomp;  # avoid \n on last field
                       @array = split(/:/);
                       # ...
                   }

               You can actually chomp anything that's an lvalue,
               including an assignment:

                   chomp($cwd = `pwd`);
                   chomp($answer = <STDIN>);

               If you chomp a list, each element is chomped, and
               the total number of characters removed is
               returned.

       chop VARIABLE

       chop LIST

       chop    Chops off the last character of a string and
               returns the character chopped.  It's used
               primarily to remove the newline from the end of an
               input record, but is much more efficient than
               s/\n// because it neither scans nor copies the
               string.  If VARIABLE is omitted, chops $_.
               Example:

                   while (<>) {
                       chop;   # avoid \n on last field
                       @array = split(/:/);
                       #...
                   }

               You can actually chop anything that's an lvalue,
               including an assignment:

                   chop($cwd = `pwd`);
                   chop($answer = <STDIN>);

               If you chop a list, each element is chopped.  Only
               the value of the last chop() is returned.

               Note that chop() returns the last character.  To
               return all but the last character, use
               substr($string, 0, -1).

       chown LIST
               Changes the owner (and group) of a list of files.
               The first two elements of the list must be the
               NUMERICAL uid and gid, in that order.  Returns the
               number of files successfully changed.

                   $cnt = chown $uid, $gid, 'foo', 'bar';
                   chown $uid, $gid, @filenames;

               Here's an example that looks up nonnumeric uids in
               the passwd file:

                   print "User: ";
                   chop($user = <STDIN>);
                   print "Files: ";
                   chop($pattern = <STDIN>);

                   ($login,$pass,$uid,$gid) = getpwnam($user)
                       or die "$user not in passwd file";

                   @ary = glob($pattern);      # expand filenames
                   chown $uid, $gid, @ary;

               On most systems, you are not allowed to change the
               ownership of the file unless you're the superuser,
               although you should be able to change the group to
               any of your secondary groups.  On insecure
               systems, these restrictions may be relaxed, but
               this is not a portable assumption.

       chr NUMBER

       chr     Returns the character represented by that NUMBER
               in the character set.  For example, chr(65) is "A"
               in ASCII.  For the reverse, use the ord entry
               elsewhere in this document.

               If NUMBER is omitted, uses $_.

       chroot FILENAME

       chroot  This function works like the system call by the
               same name: it makes the named directory the new
               root directory for all further pathnames that
               begin with a "/" by your process and all its
               children.  (It doesn't change your current working
               directory, which is unaffected.)  For security
               reasons, this call is restricted to the superuser.
               If FILENAME is omitted, does a chroot() to $_.

       close FILEHANDLE

       close   Closes the file or pipe associated with the file
               handle, returning TRUE only if stdio successfully
               flushes buffers and closes the system file
               descriptor. Closes the currently selected
               filehandle if the argument is omitted.

               You don't have to close FILEHANDLE if you are
               immediately going to do another open() on it,
               because open() will close it for you.  (See
               open().)  However, an explicit close() on an input
               file resets the line counter ($.), while the
               implicit close done by open() does not.

               If the file handle came from a piped open close()
               will additionally return FALSE if one of the other
               system calls involved fails or if the program
               exits with non-zero status.  (If the only problem
               was that the program exited non-zero $! will be
               set to 0.)  Closing a pipe also waits for the
               process executing on the pipe to complete, in case
               you want to look at the output of the pipe
               afterwards, and implicitly puts the exit status
               value of that command into $?.

               Example:

                   open(OUTPUT, '|sort >foo')  # pipe to sort
                       or die "Can't start sort: $!";
                   #...                        # print stuff to output
                   close OUTPUT                # wait for sort to finish
                       or warn $! ? "Error closing sort pipe: $!"
                                  : "Exit status $? from sort";
                   open(INPUT, 'foo')          # get sort's results
                       or die "Can't open 'foo' for input: $!";

               FILEHANDLE may be an expression whose value can be
               used as an indirect filehandle, usually the real
               filehandle name.

       closedir DIRHANDLE
               Closes a directory opened by opendir() and returns
               the success of that system call.

               DIRHANDLE may be an expression whose value can be
               used as an indirect dirhandle, usually the real
               dirhandle name.

       connect SOCKET,NAME
               Attempts to connect to a remote socket, just as
               the connect system call does.  Returns TRUE if it
               succeeded, FALSE otherwise.  NAME should be a
               packed address of the appropriate type for the
               socket.  See the examples in the section on
               Sockets: Client/Server Communication in the
               perlipc manpage.

       continue BLOCK
               Actually a flow control statement rather than a
               function.  If there is a continue BLOCK attached
               to a BLOCK (typically in a while or foreach), it
               is always executed just before the conditional is
               about to be evaluated again, just like the third
               part of a for loop in C.  Thus it can be used to
               increment a loop variable, even when the loop has
               been continued via the next statement (which is
               similar to the C continue statement).

               last, next, or redo may appear within a continue
               block. last and redo will behave as if they had
               been executed within the main block. So will next,
               but since it will execute a continue block, it may
               be more entertaining.

                   while (EXPR) {
                       ### redo always comes here
                       do_something;
                   } continue {
                       ### next always comes here
                       do_something_else;
                       # then back the top to re-check EXPR
                   }
                   ### last always comes here

               Omitting the continue section is semantically
               equivalent to using an empty one, logically
               enough. In that case, next goes directly back to
               check the condition at the top of the loop.

       cos EXPR
               Returns the cosine of EXPR (expressed in radians).
               If EXPR is omitted, takes cosine of $_.

               For the inverse cosine operation, you may use the
               POSIX::acos() function, or use this relation:

                   sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }

       crypt PLAINTEXT,SALT
               Encrypts a string exactly like the crypt(3)
               function in the C library (assuming that you
               actually have a version there that has not been
               extirpated as a potential munition).  This can
               prove useful for checking the password file for
               lousy passwords, amongst other things.  Only the
               guys wearing white hats should do this.

               Note that crypt() is intended to be a one-way
               function, much like breaking eggs to make an
               omelette.  There is no (known) corresponding
               decrypt function.  As a result, this function
               isn't all that useful for cryptography.  (For
               that, see your nearby CPAN mirror.)

               When verifying an existing encrypted string you
               should use the encrypted text as the salt (like
               crypt($plain, $crypted) eq $crypted).  This allows
               your code to work with the standard crypt() and
               with more exotic implementations.  When choosing a
               new salt create a random two character string
               whose characters come from the set [./0-9A-Za-z]
               (like join '', ('.', '/', 0..9, 'A'..'Z',
               'a'..'z')[rand 64, rand 64]).

               Here's an example that makes sure that whoever
               runs this program knows their own password:

                   $pwd = (getpwuid($<))[1];

                   system "stty -echo";
                   print "Password: ";
                   chomp($word = <STDIN>);
                   print "\n";
                   system "stty echo";

                   if (crypt($word, $pwd) ne $pwd) {
                       die "Sorry...\n";
                   } else {
                       print "ok\n";
                   }

               Of course, typing in your own password to whoever
               asks you for it is unwise.

       dbmclose HASH
               [This function has been largely superseded by the
               untie() function.]

               Breaks the binding between a DBM file and a hash.

       dbmopen HASH,DBNAME,MODE
               [This function has been largely superseded by the
               tie() function.]

               This binds a dbm(3), ndbm(3), sdbm(3), gdbm(3), or
               Berkeley DB file to a hash.  HASH is the name of
               the hash.  (Unlike normal open(), the first
               argument is NOT a filehandle, even though it looks
               like one).  DBNAME is the name of the database
               (without the .dir or .pag extension if any).  If
               the database does not exist, it is created with
               protection specified by MODE (as modified by the
               umask()).  If your system supports only the older
               DBM functions, you may perform only one dbmopen()
               in your program.  In older versions of Perl, if
               your system had neither DBM nor ndbm, calling
               dbmopen() produced a fatal error; it now falls
               back to sdbm(3).

               If you don't have write access to the DBM file,
               you can only read hash variables, not set them.
               If you want to test whether you can write, either
               use file tests or try setting a dummy hash entry
               inside an eval(), which will trap the error.

               Note that functions such as keys() and values()
               may return huge lists when used on large DBM
               files.  You may prefer to use the each() function
               to iterate over large DBM files.  Example:

                   # print out history file offsets
                   dbmopen(%HIST,'/usr/lib/news/history',0666);
                   while (($key,$val) = each %HIST) {
                       print $key, ' = ', unpack('L',$val), "\n";
                   }
                   dbmclose(%HIST);

               See also the AnyDBM_File manpage for a more
               general description of the pros and cons of the
               various dbm approaches, as well as the DB_File
               manpage for a particularly rich implementation.

               You can control which DBM library you use by
               loading that library before you call dbmopen():

                   use DB_File;
                   dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
                       or die "Can't open netscape history file: $!";

       defined EXPR

       defined Returns a Boolean value telling whether EXPR has a
               value other than the undefined value undef.  If
               EXPR is not present, $_ will be checked.

               Many operations return undef to indicate failure,
               end of file, system error, uninitialized variable,
               and other exceptional conditions.  This function
               allows you to distinguish undef from other values.
               (A simple Boolean test will not distinguish among
               undef, zero, the empty string, and "0", which are
               all equally false.)  Note that since undef is a
               valid scalar, its presence doesn't necessarily
               indicate an exceptional condition: pop() returns
               undef when its argument is an empty array, or when
               the element to return happens to be undef.

               You may also use defined() to check whether a
               subroutine exists, by saying defined &func without
               parentheses.  On the other hand, use of defined()
               upon aggregates (hashes and arrays) is not
               guaranteed to produce intuitive results, and
               should probably be avoided.

               When used on a hash element, it tells you whether
               the value is defined, not whether the key exists
               in the hash.  Use the exists entry elsewhere in
               this documentfor the latter purpose.

               Examples:

                   print if defined $switch{'D'};
                   print "$val\n" while defined($val = pop(@ary));
                   die "Can't readlink $sym: $!"
                       unless defined($value = readlink $sym);
                   sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
                   $debugging = 0 unless defined $debugging;

               Note:  Many folks tend to overuse defined(), and
               then are surprised to discover that the number 0
               and "" (the zero-length string) are, in fact,
               defined values.  For example, if you say

                   "ab" =~ /a(.*)b/;

               The pattern match succeeds, and $1 is defined,
               despite the fact that it matched "nothing".  But
               it didn't really match nothing--rather, it matched
               something that happened to be zero characters
               long.  This is all very above-board and honest.
               When a function returns an undefined value, it's
               an admission that it couldn't give you an honest
               answer.  So you should use defined() only when
               you're questioning the integrity of what you're
               trying to do.  At other times, a simple comparison
               to 0 or "" is what you want.

               Currently, using defined() on an entire array or
               hash reports whether memory for that aggregate has
               ever been allocated.  So an array you set to the
               empty list appears undefined initially, and one
               that once was full and that you then set to the
               empty list still appears defined.  You should
               instead use a simple test for size:

                   if (@an_array) { print "has array elements\n" }
                   if (%a_hash)   { print "has hash members\n"   }

               Using undef() on these, however, does clear their
               memory and then report them as not defined
               anymore, but you shouldn't do that unless you
               don't plan to use them again, because it saves
               time when you load them up again to have memory
               already ready to be filled.  The normal way to
               free up space used by an aggregate is to assign
               the empty list.

               This counterintuitive behavior of defined() on
               aggregates may be changed, fixed, or broken in a
               future release of Perl.

               See also the undef, exists,  and ref entries
               elsewhere in this document.

       delete EXPR
               Deletes the specified key(s) and their associated
               values from a hash.  For each key, returns the
               deleted value associated with that key, or the
               undefined value if there was no such key.
               Deleting from $ENV{} modifies the environment.
               Deleting from a hash tied to a DBM file deletes
               the entry from the DBM file.  (But deleting from a
               tie()d hash doesn't necessarily return anything.)

               The following deletes all the values of a hash:

                   foreach $key (keys %HASH) {
                       delete $HASH{$key};
                   }

               And so does this:

                   delete @HASH{keys %HASH}

               But both of these are slower than just assigning
               the empty list or undefining it:

                   %hash = ();         # completely empty %hash
                   undef %hash;        # forget %hash every existed

               Note that the EXPR can be arbitrarily complicated
               as long as the final operation is a hash element
               lookup or hash slice:

                   delete $ref->[$x][$y]{$key};
                   delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};

       die LIST
               Outside an eval(), prints the value of LIST to
               STDERR and exits with the current value of $!
               (errno).  If $! is 0, exits with the value of ($?
               >> 8) (backtick `command` status).  If ($? >> 8)
               is 0, exits with 255.  Inside an eval(), the error
               message is stuffed into $@ and the eval() is
               terminated with the undefined value.  This makes
               die() the way to raise an exception.

               Equivalent examples:

                   die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
                   chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"

               If the value of EXPR does not end in a newline,
               the current script line number and input line
               number (if any) are also printed, and a newline is
               supplied.  Note that the "input line number" (also
               known as "chunk") is subject to whatever notion of
               "line" happens to be currently in effect, and is
               also available as the special variable $..  See
               the section on $/ in the perlvar manpage and the
               section on $. in the perlvar manpage.

               Hint: sometimes appending ", stopped" to your
               message will cause it to make better sense when
               the string "at foo line 123" is appended.  Suppose
               you are running script "canasta".

                   die "/etc/games is no good";
                   die "/etc/games is no good, stopped";

               produce, respectively

                   /etc/games is no good at canasta line 123.
                   /etc/games is no good, stopped at canasta line 123.

               See also exit(), warn(), and the Carp module.

               If LIST is empty and $@ already contains a value
               (typically from a previous eval) that value is
               reused after appending "\t...propagated".  This is
               useful for propagating exceptions:

                   eval { ... };
                   die unless $@ =~ /Expected exception/;

               If $@ is empty then the string "Died" is used.

               die() can also be called with a reference
               argument.  If this happens to be trapped within an
               eval(), $@ contains the reference.  This behavior
               permits a more elaborate exception handling
               implementation using objects that maintain
               arbitary state about the nature of the exception.
               Such a scheme is sometimes preferable to matching
               particular string values of $@ using regular
               expressions.  Here's an example:

                   eval { ... ; die Some::Module::Exception->new( FOO => "bar" ) };
                   if ($@) {
                       if (ref($@) && UNIVERSAL::isa($@,"Some::Module::Exception")) {
                           # handle Some::Module::Exception
                       }
                       else {
                           # handle all other possible exceptions
                       }
                   }

               Since perl will stringify uncaught exception
               messages before displaying them, you may want to
               overload stringification operations on such custom
               exception objects.  See the overload manpage for
               details about that.

               You can arrange for a callback to be run just
               before the die() does its deed, by setting the
               $SIG{__DIE__} hook.  The associated handler will
               be called with the error text and can change the
               error message, if it sees fit, by calling die()
               again.  See the section on $SIG{expr} in the
               perlvar manpage for details on setting %SIG
               entries, and the section on eval BLOCK for some
               examples.

               Note that the $SIG{__DIE__} hook is currently
               called even inside eval()ed blocks/strings!  If
               one wants the hook to do nothing in such
               situations, put

                       die @_ if $^S;

               as the first line of the handler (see the section
               on $^S in the perlvar manpage).  Because this
               promotes action at a distance, this
               counterintuitive behavior may be fixed in a future
               release.

       do BLOCK
               Not really a function.  Returns the value of the
               last command in the sequence of commands indicated
               by BLOCK.  When modified by a loop modifier,
               executes the BLOCK once before testing the loop
               condition.  (On other statements the loop
               modifiers test the conditional first.)

               do BLOCK does not count as a loop, so the loop
               control statements next, last, or redo cannot be
               used to leave or restart the block.  See the
               perlsyn manpage for alternative strategies.

       do SUBROUTINE(LIST)
               A deprecated form of subroutine call.  See the
               perlsub manpage.

       do EXPR Uses the value of EXPR as a filename and executes
               the contents of the file as a Perl script.  Its
               primary use is to include subroutines from a Perl
               subroutine library.

                   do 'stat.pl';

               is just like

                   scalar eval `cat stat.pl`;

               except that it's more efficient and concise, keeps
               track of the current filename for error messages,
               searches the @INC libraries, and updates %INC if
               the file is found.  See the section on Predefined
               Names in the perlvar manpage for these variables.
               It also differs in that code evaluated with do
               FILENAME cannot see lexicals in the enclosing
               scope; eval STRING does.  It's the same, however,
               in that it does reparse the file every time you
               call it, so you probably don't want to do this
               inside a loop.

               If do cannot read the file, it returns undef and
               sets $! to the error.  If do can read the file but
               cannot compile it, it returns undef and sets an
               error message in $@.   If the file is successfully
               compiled, do returns the value of the last
               expression evaluated.

               Note that inclusion of library modules is better
               done with the use() and require() operators, which
               also do automatic error checking and raise an
               exception if there's a problem.

               You might like to use do to read in a program
               configuration file.  Manual error checking can be
               done this way:

                   # read in config files: system first, then user
                   for $file ("/share/prog/defaults.rc",
                              "$ENV{HOME}/.someprogrc")
                  {
                       unless ($return = do $file) {
                           warn "couldn't parse $file: $@" if $@;
                           warn "couldn't do $file: $!"    unless defined $return;
                           warn "couldn't run $file"       unless $return;
                       }
                   }

       dump LABEL

       dump    This causes an immediate core dump.  Primarily
               this is so that you can use the uunndduummpp program to
               turn your core dump into an executable binary
               after having initialized all your variables at the
               beginning of the program.  When the new binary is
               executed it will begin by executing a goto LABEL
               (with all the restrictions that goto suffers).
               Think of it as a goto with an intervening core
               dump and reincarnation.  If LABEL is omitted,
               restarts the program from the top.  WARNING: Any
               files opened at the time of the dump will NOT be
               open any more when the program is reincarnated,
               with possible resulting confusion on the part of
               Perl.  See also --uu option in the perlrun manpage.

               Example:

                   #!/usr/bin/perl
                   require 'getopt.pl';
                   require 'stat.pl';
                   %days = (
                       'Sun' => 1,
                       'Mon' => 2,
                       'Tue' => 3,
                       'Wed' => 4,
                       'Thu' => 5,
                       'Fri' => 6,
                       'Sat' => 7,
                   );

                   dump QUICKSTART if $ARGV[0] eq '-d';

                   QUICKSTART:
                   Getopt('f');

               This operator is largely obsolete, partly because
               it's very hard to convert a core file into an
               executable, and because the real perl-to-C
               compiler has superseded it.

       each HASH
               When called in list context, returns a 2-element
               list consisting of the key and value for the next
               element of a hash, so that you can iterate over
               it.  When called in scalar context, returns the
               key for only the "next" element in the hash.
               (Note: Keys may be "0" or "", which are logically
               false; you may wish to avoid constructs like while
               ($k = each %foo) {} for this reason.)

               Entries are returned in an apparently random
               order.  The actual random order is subject to
               change in future versions of perl, but it is
               guaranteed to be in the same order as either the
               keys() or values() function would produce on the
               same (unmodified) hash.

               When the hash is entirely read, a null array is
               returned in list context (which when assigned
               produces a FALSE (0) value), and undef in scalar
               context.  The next call to each() after that will
               start iterating again.  There is a single iterator
               for each hash, shared by all each(), keys(), and
               values() function calls in the program; it can be
               reset by reading all the elements from the hash,
               or by evaluating keys HASH or values HASH.  If you
               add or delete elements of a hash while you're
               iterating over it, you may get entries skipped or
               duplicated, so don't.

               The following prints out your environment like the
               printenv(1) program, only in a different order:

                   while (($key,$value) = each %ENV) {
                       print "$key=$value\n";
                   }

               See also keys(), values() and sort().

       eof FILEHANDLE

       eof ()

       eof     Returns 1 if the next read on FILEHANDLE will
               return end of file, or if FILEHANDLE is not open.
               FILEHANDLE may be an expression whose value gives
               the real filehandle.  (Note that this function
               actually reads a character and then ungetc()s it,
               so isn't very useful in an interactive context.)
               Do not read from a terminal file (or call
               eof(FILEHANDLE) on it) after end-of-file is
               reached.  Filetypes such as terminals may lose the
               end-of-file condition if you do.

               An eof without an argument uses the last file read
               as argument.  Using eof() with empty parentheses
               is very different.  It indicates the pseudo file
               formed of the files listed on the command line,
               i.e., eof() is reasonable to use inside a while
               (<>) loop to detect the end of only the last file.
               Use eof(ARGV) or eof without the parentheses to
               test EACH file in a while (<>) loop.  Examples:

                   # reset line numbering on each input file
                   while (<>) {
                       next if /^\s*#/;        # skip comments
                       print "$.\t$_";
                   } continue {
                       close ARGV  if eof;     # Not eof()!
                   }

                   # insert dashes just before last line of last file
                   while (<>) {
                       if (eof()) {            # check for end of current file
                           print "--------------\n";
                           close(ARGV);        # close or last; is needed if we
                                               # are reading from the terminal
                       }
                       print;
                   }

               Practical hint: you almost never need to use eof
               in Perl, because the input operators return false
               values when they run out of data, or if there was
               an error.

       eval EXPR

       eval BLOCK
               In the first form, the return value of EXPR is
               parsed and executed as if it were a little Perl
               program.  The value of the expression (which is
               itself determined within scalar context) is first
               parsed, and if there weren't any errors, executed
               in the context of the current Perl program, so
               that any variable settings or subroutine and
               format definitions remain afterwards.  Note that
               the value is parsed every time the eval executes.
               If EXPR is omitted, evaluates $_.  This form is
               typically used to delay parsing and subsequent
               execution of the text of EXPR until run time.

               In the second form, the code within the BLOCK is
               parsed only once--at the same time the code
               surrounding the eval itself was parsed--and
               executed within the context of the current Perl
               program.  This form is typically used to trap
               exceptions more efficiently than the first (see
               below), while also providing the benefit of
               checking the code within BLOCK at compile time.

               The final semicolon, if any, may be omitted from
               the value of EXPR or within the BLOCK.

               In both forms, the value returned is the value of
               the last expression evaluated inside the mini-
               program; a return statement may be also used, just
               as with subroutines.  The expression providing the
               return value is evaluated in void, scalar, or list
               context, depending on the context of the eval
               itself.  See the wantarray entry elsewhere in this
               documentfor more on how the evaluation context can
               be determined.

               If there is a syntax error or runtime error, or a
               die() statement is executed, an undefined value is
               returned by eval(), and $@ is set to the error
               message.  If there was no error, $@ is guaranteed
               to be a null string.  Beware that using eval()
               neither silences perl from printing warnings to
               STDERR, nor does it stuff the text of warning
               messages into $@.  To do either of those, you have
               to use the $SIG{__WARN__} facility.  See the warn
               entry elsewhere in this document and the perlvar
               manpage.

               Note that, because eval() traps otherwise-fatal
               errors, it is useful for determining whether a
               particular feature (such as socket() or symlink())
               is implemented.  It is also Perl's exception
               trapping mechanism, where the die operator is used
               to raise exceptions.

               If the code to be executed doesn't vary, you may
               use the eval-BLOCK form to trap run-time errors
               without incurring the penalty of recompiling each
               time.  The error, if any, is still returned in $@.
               Examples:

                   # make divide-by-zero nonfatal
                   eval { $answer = $a / $b; }; warn $@ if $@;

                   # same thing, but less efficient
                   eval '$answer = $a / $b'; warn $@ if $@;

                   # a compile-time error
                   eval { $answer = };                 # WRONG

                   # a run-time error
                   eval '$answer =';   # sets $@

               Due to the current arguably broken state of
               __DIE__ hooks, when using the eval{} form as an
               exception trap in libraries, you may wish not to
               trigger any __DIE__ hooks that user code may have
               installed.  You can use the local $SIG{__DIE__}
               construct for this purpose, as shown in this
               example:

                   # a very private exception trap for divide-by-zero
                   eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
                   warn $@ if $@;

               This is especially significant, given that __DIE__
               hooks can call die() again, which has the effect
               of changing their error messages:

                   # __DIE__ hooks may modify error messages
                   {
                      local $SIG{'__DIE__'} =
                             sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
                      eval { die "foo lives here" };
                      print $@ if $@;                # prints "bar lives here"
                   }

               Because this promotes action at a distance, this
               counterintuive behavior may be fixed in a future
               release.

               With an eval(), you should be especially careful
               to remember what's being looked at when:

                   eval $x;            # CASE 1
                   eval "$x";          # CASE 2

                   eval '$x';          # CASE 3
                   eval { $x };        # CASE 4

                   eval "\$$x++";      # CASE 5
                   $$x++;              # CASE 6

               Cases 1 and 2 above behave identically: they run
               the code contained in the variable $x.  (Although
               case 2 has misleading double quotes making the
               reader wonder what else might be happening
               (nothing is).)  Cases 3 and 4 likewise behave in
               the same way: they run the code '$x', which does
               nothing but return the value of $x.  (Case 4 is
               preferred for purely visual reasons, but it also
               has the advantage of compiling at compile-time
               instead of at run-time.)  Case 5 is a place where
               normally you WOULD like to use double quotes,
               except that in this particular situation, you can
               just use symbolic references instead, as in case
               6.

               eval BLOCK does not count as a loop, so the loop
               control statements next, last, or redo cannot be
               used to leave or restart the block.

       exec LIST

       exec PROGRAM LIST
               The exec() function executes a system command AND
               NEVER RETURNS - use system() instead of exec() if
               you want it to return. It fails and returns FALSE
               only if the command does not exist and it is
               executed directly instead of via your system's
               command shell (see below).

               Since it's a common mistake to use exec() instead
               of system(), Perl warns you if there is a
               following statement which isn't die(), warn(), or
               exit() (if -w is set  -  but you always do that).
               If you really want to follow an exec() with some
               other statement, you can use one of these styles
               to avoid the warning:

                   exec ('foo')   or print STDERR "couldn't exec foo: $!";
                   { exec ('foo') }; print STDERR "couldn't exec foo: $!";

               If there is more than one argument in LIST, or if
               LIST is an array with more than one value, calls
               execvp(3) with the arguments in LIST.  If there is
               only one scalar argument or an array with one
               element in it, the argument is checked for shell
               metacharacters, and if there are any, the entire
               argument is passed to the system's command shell
               for parsing (this is /bin/sh -c on Unix platforms,
               but varies on other platforms).  If there are no
               shell metacharacters in the argument, it is split
               into words and passed directly to execvp(), which
               is more efficient.  Note: exec() and system() do
               not flush your output buffer, so you may need to
               set $| to avoid lost output.  Examples:

                   exec '/bin/echo', 'Your arguments are: ', @ARGV;
                   exec "sort $outfile | uniq";

               If you don't really want to execute the first
               argument, but want to lie to the program you are
               executing about its own name, you can specify the
               program you actually want to run as an "indirect
               object" (without a comma) in front of the LIST.
               (This always forces interpretation of the LIST as
               a multivalued list, even if there is only a single
               scalar in the list.)  Example:

                   $shell = '/bin/csh';
                   exec $shell '-sh';          # pretend it's a login shell

               or, more directly,

                   exec {'/bin/csh'} '-sh';    # pretend it's a login shell

               When the arguments get executed via the system
               shell, results will be subject to its quirks and
               capabilities.  See the section on `STRING` in the
               perlop manpage for details.

               Using an indirect object with exec() or system()
               is also more secure.  This usage forces
               interpretation of the arguments as a multivalued
               list, even if the list had just one argument.
               That way you're safe from the shell expanding
               wildcards or splitting up words with whitespace in
               them.

                   @args = ( "echo surprise" );

                   exec @args;               # subject to shell escapes
                                               # if @args == 1
                   exec { $args[0] } @args;  # safe even with one-arg list

               The first version, the one without the indirect
               object, ran the echo program, passing it
               "surprise" an argument.  The second version
               didn't--it tried to run a program literally called
               "echo surprise", didn't find it, and set $? to a
               non-zero value indicating failure.

               Note that exec() will not call your END blocks,
               nor will it call any DESTROY methods in your
               objects.

       exists EXPR
               Returns TRUE if the specified hash key exists in
               its hash array, even if the corresponding value is
               undefined.

                   print "Exists\n"    if exists $array{$key};
                   print "Defined\n"   if defined $array{$key};
                   print "True\n"      if $array{$key};

               A hash element can be TRUE only if it's defined,
               and defined if it exists, but the reverse doesn't
               necessarily hold true.

               Note that the EXPR can be arbitrarily complicated
               as long as the final operation is a hash key
               lookup:

                   if (exists $ref->{A}->{B}->{$key})  { }
                   if (exists $hash{A}{B}{$key})       { }

               Although the last element will not spring into
               existence just because its existence was tested,
               intervening ones will.  Thus $ref->{"A"} and
               $ref->{"A"}->{"B"} will spring into existence due
               to the existence test for a $key element.  This
               happens anywhere the arrow operator is used,
               including even

                   undef $ref;
                   if (exists $ref->{"Some key"})      { }
                   print $ref;             # prints HASH(0x80d3d5c)

               This surprising autovivification in what does not
               at first--or even second--glance appear to be an
               lvalue context may be fixed in a future release.

       exit EXPR
               Evaluates EXPR and exits immediately with that
               value.    Example:

                   $ans = <STDIN>;
                   exit 0 if $ans =~ /^[Xx]/;

               See also die().  If EXPR is omitted, exits with 0
               status.  The only universally recognized values
               for EXPR are 0 for success and 1 for error; other
               values are subject to interpretation depending on
               the environment in which the Perl program is
               running.  For example, exiting 69 (EX_UNAVAILABLE)
               from a sendmail incoming-mail filter will cause
               the mailer to return the item undelivered, but
               that's not true everywhere.

               Don't use exit() to abort a subroutine if there's
               any chance that someone might want to trap
               whatever error happened.  Use die() instead, which
               can be trapped by an eval().

               The exit() function does not always exit
               immediately. It calls any defined END routines
               first, but these END routines may not themselves
               abort the exit. Likewise any object destructors
               that need to be called are called before the real
               exit.  If this is a problem, you can call
               POSIX:_exit($status) to avoid END and destructor
               processing.  See the perlsub manpage for details.

       exp EXPR

       exp     Returns e (the natural logarithm base) to the
               power of EXPR.  If EXPR is omitted, gives exp($_).

       fcntl FILEHANDLE,FUNCTION,SCALAR
               Implements the fcntl(2) function.  You'll probably
               have to say

                   use Fcntl;

               first to get the correct constant definitions.
               Argument processing and value return works just
               like ioctl() below.  For example:

                   use Fcntl;
                   fcntl($filehandle, F_GETFL, $packed_return_buffer)
                       or die "can't fcntl F_GETFL: $!";

               You don't have to check for defined() on the
               return from fnctl().  Like ioctl(), it maps a 0
               return from the system call into "0 but true" in
               Perl.  This string is true in boolean context and
               0 in numeric context.  It is also exempt from the
               normal --ww warnings on improper numeric
               conversions.

               Note that fcntl() will produce a fatal error if
               used on a machine that doesn't implement fcntl(2).
               See the Fcntl module or your fcntl(2) manpage to
               learn what functions are available on your system.

       fileno FILEHANDLE
               Returns the file descriptor for a filehandle, or
               undefined if the filehandle is not open.  This is
               mainly useful for constructing bitmaps for
               select() and low-level POSIX tty-handling
               operations.  If FILEHANDLE is an expression, the
               value is taken as an indirect filehandle,
               generally its name.

               You can use this to find out whether two handles
               refer to the same underlying descriptor:

                   if (fileno(THIS) == fileno(THAT)) {
                       print "THIS and THAT are dups\n";
                   }

       flock FILEHANDLE,OPERATION
               Calls flock(2), or an emulation of it, on
               FILEHANDLE.  Returns TRUE for success, FALSE on
               failure.  Produces a fatal error if used on a
               machine that doesn't implement flock(2), fcntl(2)
               locking, or lockf(3).  flock() is Perl's portable
               file locking interface, although it locks only
               entire files, not records.

               Two potentially non-obvious but traditional flock
               semantics are that it waits indefinitely until the
               lock is granted, and that its locks mmeerreellyy
               aaddvviissoorryy.  Such discretionary locks are more
               flexible, but offer fewer guarantees.  This means
               that files locked with flock() may be modified by
               programs that do not also use flock().  See the
               perlport manpage, your port's specific
               documentation, or your system-specific local
               manpages for details.  It's best to assume
               traditional behavior if you're writing portable
               programs.  (But if you're not, you should as
               always feel perfectly free to write for your own
               system's idiosyncrasies (sometimes called
               "features").  Slavish adherence to portability
               concerns shouldn't get in the way of your getting
               your job done.)

               OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN,
               possibly combined with LOCK_NB.  These constants
               are traditionally valued 1, 2, 8 and 4, but you
               can use the symbolic names if import them from the
               Fcntl module, either individually, or as a group
               using the ':flock' tag.  LOCK_SH requests a shared
               lock, LOCK_EX requests an exclusive lock, and
               LOCK_UN releases a previously requested lock.  If
               LOCK_NB is added to LOCK_SH or LOCK_EX then
               flock() will return immediately rather than
               blocking waiting for the lock (check the return
               status to see if you got it).

               To avoid the possibility of miscoordination, Perl
               now flushes FILEHANDLE before locking or unlocking
               it.

               Note that the emulation built with lockf(3)
               doesn't provide shared locks, and it requires that
               FILEHANDLE be open with write intent.  These are
               the semantics that lockf(3) implements.  Most if
               not all systems implement lockf(3) in terms of
               fcntl(2) locking, though, so the differing
               semantics shouldn't bite too many people.

               Note also that some versions of flock() cannot
               lock things over the network; you would need to
               use the more system-specific fcntl() for that.  If
               you like you can force Perl to ignore your
               system's flock(2) function, and so provide its own
               fcntl(2)-based emulation, by passing the switch
               -Ud_flock to the Configure program when you
               configure perl.

               Here's a mailbox appender for BSD systems.

                   use Fcntl ':flock'; # import LOCK_* constants

                   sub lock {
                       flock(MBOX,LOCK_EX);
                       # and, in case someone appended
                       # while we were waiting...
                       seek(MBOX, 0, 2);
                   }

                   sub unlock {
                       flock(MBOX,LOCK_UN);
                   }

                   open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
                           or die "Can't open mailbox: $!";

                   lock();
                   print MBOX $msg,"\n\n";
                   unlock();

               On systems that support a real flock(), locks are
               inherited across fork() calls, whereas those that
               must resort to the more capricious fcntl()
               function lose the locks, making it harder to write
               servers.

               See also the DB_File manpage for other flock()
               examples.

       fork    Does a fork(2) system call to create a new process
               running the same program at the same point.  It
               returns the child pid to the parent process, 0 to
               the child process, or undef if the fork is
               unsuccessful.  File descriptors (and sometimes
               locks on those descriptors) are shared, while
               everything else is copied.  On most systems
               supporting fork(), great care has gone into making
               it extremely efficient (for example, using copy-
               on-write technology on data pages), making it the
               dominant paradigm for multitasking over the last
               few decades.

               Note: unflushed buffers remain unflushed in both
               processes, which means you may need to set $|
               ($AUTOFLUSH in English) or call the autoflush()
               method of IO::Handle to avoid duplicate output.

               If you fork() without ever waiting on your
               children, you will accumulate zombies.  On some
               systems, you can avoid this by setting $SIG{CHLD}
               to "IGNORE".  See also the perlipc manpage for
               more examples of forking and reaping moribund
               children.

               Note that if your forked child inherits system
               file descriptors like STDIN and STDOUT that are
               actually connected by a pipe or socket, even if
               you exit, then the remote server (such as, say, a
               CGI script or a backgrounded job launced from a
               remote shell) won't think you're done.  You should
               reopen those to /dev/null if it's any issue.

       format  Declare a picture format for use by the write()
               function.  For example:

                   format Something =
                       Test: @<<<<<<<< @||||| @>>>>>
                             $str,     $%,    '$' . int($num)
                   .

                   $str = "widget";
                   $num = $cost/$quantity;
                   $~ = 'Something';
                   write;

               See the perlform manpage for many details and
               examples.

       formline PICTURE,LIST
               This is an internal function used by formats,
               though you may call it, too.  It formats (see the
               perlform manpage) a list of values according to
               the contents of PICTURE, placing the output into
               the format output accumulator, $^A (or
               $ACCUMULATOR in English).  Eventually, when a
               write() is done, the contents of $^A are written
               to some filehandle, but you could also read $^A
               yourself and then set $^A back to "".  Note that a
               format typically does one formline() per line of
               form, but the formline() function itself doesn't
               care how many newlines are embedded in the
               PICTURE.  This means that the ~ and ~~ tokens will
               treat the entire PICTURE as a single line.  You
               may therefore need to use multiple formlines to
               implement a single record format, just like the
               format compiler.

               Be careful if you put double quotes around the
               picture, because an "@" character may be taken to
               mean the beginning of an array name.  formline()
               always returns TRUE.  See the perlform manpage for
               other examples.

       getc FILEHANDLE

       getc    Returns the next character from the input file
               attached to FILEHANDLE, or the undefined value at
               end of file, or if there was an error.  If
               FILEHANDLE is omitted, reads from STDIN.  This is
               not particularly efficient.  However, it cannot be
               used by itself to fetch single characters without
               waiting for the user to hit enter.  For that, try
               something more like:

                   if ($BSD_STYLE) {
                       system "stty cbreak </dev/tty >/dev/tty 2>&1";
                   }
                   else {
                       system "stty", '-icanon', 'eol', "\001";
                   }

                   $key = getc(STDIN);

                   if ($BSD_STYLE) {
                       system "stty -cbreak </dev/tty >/dev/tty 2>&1";
                   }
                   else {
                       system "stty", 'icanon', 'eol', '^@'; # ASCII null
                   }
                   print "\n";

               Determination of whether $BSD_STYLE should be set
               is left as an exercise to the reader.

               The POSIX::getattr() function can do this more
               portably on systems purporting POSIX compliance.
               See also the Term::ReadKey module from your
               nearest CPAN site; details on CPAN can be found on
               the CPAN entry in the perlmodlib manpage.

       getlogin
               Implements the C library function of the same
               name, which on most systems returns the current
               login from /etc/utmp, if any.  If null, use
               getpwuid().

                   $login = getlogin || getpwuid($<) || "Kilroy";

               Do not consider getlogin() for authentication: it
               is not as secure as getpwuid().

       getpeername SOCKET
               Returns the packed sockaddr address of other end
               of the SOCKET connection.

                   use Socket;
                   $hersockaddr    = getpeername(SOCK);
                   ($port, $iaddr) = unpack_sockaddr_in($hersockaddr);
                   $herhostname    = gethostbyaddr($iaddr, AF_INET);
                   $herstraddr     = inet_ntoa($iaddr);

       getpgrp PID
               Returns the current process group for the
               specified PID.  Use a PID of 0 to get the current
               process group for the current process.  Will raise
               an exception if used on a machine that doesn't
               implement getpgrp(2).  If PID is omitted, returns
               process group of current process.  Note that the
               POSIX version of getpgrp() does not accept a PID
               argument, so only PID==0 is truly portable.

       getppid Returns the process id of the parent process.

       getpriority WHICH,WHO
               Returns the current priority for a process, a
               process group, or a user.  (See the getpriority(2)
               manpage.)  Will raise a fatal exception if used on
               a machine that doesn't implement getpriority(2).

       getpwnam NAME

       getgrnam NAME

       gethostbyname NAME

       getnetbyname NAME

       getprotobyname NAME

       getpwuid UID

       getgrgid GID

       getservbyname NAME,PROTO

       gethostbyaddr ADDR,ADDRTYPE

       getnetbyaddr ADDR,ADDRTYPE

       getprotobynumber NUMBER

       getservbyport PORT,PROTO

       getpwent

       getgrent

       gethostent

       getnetent

       getprotoent

       getservent

       setpwent

       setgrent

       sethostent STAYOPEN

       setnetent STAYOPEN

       setprotoent STAYOPEN

       setservent STAYOPEN

       endpwent

       endgrent

       endhostent

       endnetent

       endprotoent

       endservent
               These routines perform the same functions as their
               counterparts in the system library.  In list
               context, the return values from the various get
               routines are as follows:

                   ($name,$passwd,$uid,$gid,
                      $quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
                   ($name,$passwd,$gid,$members) = getgr*
                   ($name,$aliases,$addrtype,$length,@addrs) = gethost*
                   ($name,$aliases,$addrtype,$net) = getnet*
                   ($name,$aliases,$proto) = getproto*
                   ($name,$aliases,$port,$proto) = getserv*

               (If the entry doesn't exist you get a null list.)

               In scalar context, you get the name, unless the
               function was a lookup by name, in which case you
               get the other thing, whatever it is.  (If the
               entry doesn't exist you get the undefined value.)
               For example:

                   $uid   = getpwnam($name);
                   $name  = getpwuid($num);
                   $name  = getpwent();
                   $gid   = getgrnam($name);
                   $name  = getgrgid($num;
                   $name  = getgrent();
                   #etc.

               In getpw*() the fields $quota, $comment, and
               $expire are special cases in the sense that in
               many systems they are unsupported.  If the $quota
               is unsupported, it is an empty scalar.  If it is
               supported, it usually encodes the disk quota.  If
               the $comment field is unsupported, it is an empty
               scalar.  If it is supported it usually encodes
               some administrative comment about the user.  In
               some systems the $quota field may be $change or
               $age, fields that have to do with password aging.
               In some systems the $comment field may be $class.
               The $expire field, if present, encodes the
               expiration period of the account or the password.
               For the availability and the exact meaning of
               these fields in your system, please consult your
               getpwnam(3) documentation and your pwd.h file.
               You can also find out from within Perl what your
               $quota and $comment fields mean and whether you
               have the $expire field by using the Config module
               and the values d_pwquota, d_pwage, d_pwchange,
               d_pwcomment, and d_pwexpire.  Shadow password
               files are only supported if your vendor has
               implemented them in the intuitive fashion that
               calling the regular C library routines gets the
               shadow versions if you're running under privilege.
               Those that incorrectly implement a separate
               library call are not supported.

               The $members value returned by getgr*() is a space
               separated list of the login names of the members
               of the group.

               For the gethost*() functions, if the h_errno
               variable is supported in C, it will be returned to
               you via $? if the function call fails.  The @addrs
               value returned by a successful call is a list of
               the raw addresses returned by the corresponding
               system library call.  In the Internet domain, each
               address is four bytes long and you can unpack it
               by saying something like:

                   ($a,$b,$c,$d) = unpack('C4',$addr[0]);

               The Socket library makes this slightly easier:

                   use Socket;
                   $iaddr = inet_aton("127.1"); # or whatever address
                   $name  = gethostbyaddr($iaddr, AF_INET);

                   # or going the other way
                   $straddr = inet_ntoa($iaddr");

               If you get tired of remembering which element of
               the return list contains which return value, by-
               name interfaces are also provided in modules:
               File::stat, Net::hostent, Net::netent,
               Net::protoent, Net::servent, Time::gmtime,
               Time::localtime, and User::grent.  These override
               the normal built-in, replacing them with versions
               that return objects with the appropriate names for
               each field.  For example:

                  use File::stat;
                  use User::pwent;
                  $is_his = (stat($filename)->uid == pwent($whoever)->uid);

               Even though it looks like they're the same method
               calls (uid), they aren't, because a File::stat
               object is different from a User::pwent object.

       getsockname SOCKET
               Returns the packed sockaddr address of this end of
               the SOCKET connection.

                   use Socket;
                   $mysockaddr = getsockname(SOCK);
                   ($port, $myaddr) = unpack_sockaddr_in($mysockaddr);

       getsockopt SOCKET,LEVEL,OPTNAME
               Returns the socket option requested, or undef if
               there is an error.

       glob EXPR

       glob    Returns the value of EXPR with filename expansions
               such as the standard Unix shell /bin/csh would do.
               This is the internal function implementing the
               <*.c> operator, but you can use it directly.  If
               EXPR is omitted, $_ is used.  The <*.c> operator
               is discussed in more detail in the section on I/O
               Operators in the perlop manpage.

       gmtime EXPR
               Converts a time as returned by the time function
               to a 9-element array with the time localized for
               the standard Greenwich time zone.  Typically used
               as follows:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                           gmtime(time);

               All array elements are numeric, and come straight
               out of a struct tm.  In particular this means that
               $mon has the range 0..11 and $wday has the range
               0..6 with sunday as day 0.  Also, $year is the
               number of years since 1900, that is, $year is 123
               in year 2023, not simply the last two digits of
               the year.  If you assume it is, then you create
               non-Y2K-compliant programs--and you wouldn't want
               to do that, would you?

               If EXPR is omitted, does gmtime(time()).

               In scalar context, returns the ctime(3) value:

                   $now_string = gmtime;  # e.g., "Thu Oct 13 04:54:34 1994"

               Also see the timegm() function provided by the
               Time::Local module, and the strftime(3) function
               available via the POSIX module.

               This scalar value is nnoott locale dependent (see the
               perllocale manpage), but is instead a Perl
               builtin.  Also see the Time::Local module, and the
               strftime(3) and mktime(3) functions available via
               the POSIX module.  To get somewhat similar but
               locale dependent date strings, set up your locale
               environment variables appropriately (please see
               the perllocale manpage) and try for example:

                   use POSIX qw(strftime);
                   $now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;

               Note that the %a and %b escapes, which represent
               the short forms of the day of the week and the
               month of the year, may not necessarily be three
               characters wide in all locales.

       goto LABEL

       goto EXPR

       goto &NAME
               The goto-LABEL form finds the statement labeled
               with LABEL and resumes execution there.  It may
               not be used to go into any construct that requires
               initialization, such as a subroutine or a foreach
               loop.  It also can't be used to go into a
               construct that is optimized away, or to get out of
               a block or subroutine given to sort().  It can be
               used to go almost anywhere else within the dynamic
               scope, including out of subroutines, but it's
               usually better to use some other construct such as
               last or die().  The author of Perl has never felt
               the need to use this form of goto (in Perl, that
               is--C is another matter).

               The goto-EXPR form expects a label name, whose
               scope will be resolved dynamically.  This allows
               for computed gotos per FORTRAN, but isn't
               necessarily recommended if you're optimizing for
               maintainability:

                   goto ("FOO", "BAR", "GLARCH")[$i];

               The goto-&NAME form is highly magical, and
               substitutes a call to the named subroutine for the
               currently running subroutine.  This is used by
               AUTOLOAD subroutines that wish to load another
               subroutine and then pretend that the other
               subroutine had been called in the first place
               (except that any modifications to @_ in the
               current subroutine are propagated to the other
               subroutine.)  After the goto, not even caller()
               will be able to tell that this routine was called
               first.

       grep BLOCK LIST

       grep EXPR,LIST
               This is similar in spirit to, but not the same as,
               grep(1) and its relatives.  In particular, it is
               not limited to using regular expressions.

               Evaluates the BLOCK or EXPR for each element of
               LIST (locally setting $_ to each element) and
               returns the list value consisting of those
               elements for which the expression evaluated to
               TRUE.  In scalar context, returns the number of
               times the expression was TRUE.

                   @foo = grep(!/^#/, @bar);    # weed out comments

               or equivalently,

                   @foo = grep {!/^#/} @bar;    # weed out comments

               Note that, because $_ is a reference into the list
               value, it can be used to modify the elements of
               the array.  While this is useful and supported, it
               can cause bizarre results if the LIST is not a
               named array.  Similarly, grep returns aliases into
               the original list, much as a for loop's index
               variable aliases the list elements.  That is,
               modifying an element of a list returned by grep
               (for example, in a foreach, map() or another
               grep()) actually modifies the element in the
               original list.  This is usually something to be
               avoided when writing clear code.

               See also the map entry elsewhere in this
               documentfor an array composed of the results of
               the BLOCK or EXPR.

       hex EXPR

       hex     Interprets EXPR as a hex string and returns the
               corresponding value.  (To convert strings that
               might start with either 0, 0x, or 0b, see the oct
               entry elsewhere in this document.)  If EXPR is
               omitted, uses $_.

                   print hex '0xAf'; # prints '175'
                   print hex 'aF';   # same

       import  There is no builtin import() function.  It is just
               an ordinary method (subroutine) defined (or
               inherited) by modules that wish to export names to
               another module.  The use() function calls the
               import() method for the package used.  See also
               the use() entry elsewhere in this documentthe
               perlmod manpage, and the Exporter manpage.

       index STR,SUBSTR,POSITION

       index STR,SUBSTR
               The index function searches for one string within
               another, but without the wildcard-like behavior of
               a full regular-expression pattern match.  It
               returns the position of the first occurrence of
               SUBSTR in STR at or after POSITION.  If POSITION
               is omitted, starts searching from the beginning of
               the string.  The return value is based at 0 (or
               whatever you've set the $[ variable to--but don't
               do that).  If the substring is not found, returns
               one less than the base, ordinarily -1.

       int EXPR

       int     Returns the integer portion of EXPR.  If EXPR is
               omitted, uses $_.  You should not use this
               function for rounding: one because it truncates
               towards 0, and two because machine representations
               of floating point numbers can sometimes produce
               counterintuitive results.  For example,
               int(-6.725/0.025) produces -268 rather than the
               correct -269; that's because it's really more like
               -268.99999999999994315658 instead.  Usually, the
               sprintf(), printf(), or the POSIX::floor and
               POSIX::ceil functions will serve you better than
               will int().

       ioctl FILEHANDLE,FUNCTION,SCALAR
               Implements the ioctl(2) function.  You'll probably
               first have to say

                   require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph

               to get the correct function definitions.  If
               ioctl.ph doesn't exist or doesn't have the correct
               definitions you'll have to roll your own, based on
               your C header files such as <sys/ioctl.h>.  (There
               is a Perl script called hh22pphh that comes with the
               Perl kit that may help you in this, but it's
               nontrivial.)  SCALAR will be read and/or written
               depending on the FUNCTION--a pointer to the string
               value of SCALAR will be passed as the third
               argument of the actual ioctl() call.  (If SCALAR
               has no string value but does have a numeric value,
               that value will be passed rather than a pointer to
               the string value.  To guarantee this to be TRUE,
               add a 0 to the scalar before using it.)  The
               pack() and unpack() functions are useful for
               manipulating the values of structures used by
               ioctl().  The following example sets the erase
               character to DEL.

                   require 'ioctl.ph';
                   $getp = &TIOCGETP;
                   die "NO TIOCGETP" if $@ || !$getp;
                   $sgttyb_t = "ccccs";                # 4 chars and a short
                   if (ioctl(STDIN,$getp,$sgttyb)) {
                       @ary = unpack($sgttyb_t,$sgttyb);
                       $ary[2] = 127;
                       $sgttyb = pack($sgttyb_t,@ary);
                       ioctl(STDIN,&TIOCSETP,$sgttyb)
                           || die "Can't ioctl: $!";
                   }

               The return value of ioctl() (and fcntl()) is as
               follows:

                       if OS returns:          then Perl returns:
                           -1                    undefined value
                            0                  string "0 but true"
                       anything else               that number

               Thus Perl returns TRUE on success and FALSE on
               failure, yet you can still easily determine the
               actual value returned by the operating system:

                   $retval = ioctl(...) || -1;
                   printf "System returned %d\n", $retval;

               The special string "0 but true" is exempt from --ww
               complaints about improper numeric conversions.

       join EXPR,LIST
               Joins the separate strings of LIST into a single
               string with fields separated by the value of EXPR,
               and returns that new string.  Example:

                   $rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);

               See the split entry elsewhere in this document.

       keys HASH
               Returns a list consisting of all the keys of the
               named hash.  (In a scalar context, returns the
               number of keys.)  The keys are returned in an
               apparently random order.  The actual random order
               is subject to change in future versions of perl,
               but it is guaranteed to be the same order as
               either the values() or each() function produces
               (given that the hash has not been modified).  As a
               side effect, it resets HASH's iterator.

               Here is yet another way to print your environment:

                   @keys = keys %ENV;
                   @values = values %ENV;
                   while ($#keys >= 0) {
                       print pop(@keys), '=', pop(@values), "\n";
                   }

               or how about sorted by key:

                   foreach $key (sort(keys %ENV)) {
                       print $key, '=', $ENV{$key}, "\n";
                   }

               To sort a hash by value, you'll need to use a
               sort() function.  Here's a descending numeric sort
               of a hash by its values:

                   foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
                       printf "%4d %s\n", $hash{$key}, $key;
                   }

               As an lvalue keys() allows you to increase the
               number of hash buckets allocated for the given
               hash.  This can gain you a measure of efficiency
               if you know the hash is going to get big.  (This
               is similar to pre-extending an array by assigning
               a larger number to $#array.)  If you say

                   keys %hash = 200;

               then %hash will have at least 200 buckets
               allocated for it--256 of them, in fact, since it
               rounds up to the next power of two.  These buckets
               will be retained even if you do %hash = (), use
               undef %hash if you want to free the storage while
               %hash is still in scope.  You can't shrink the
               number of buckets allocated for the hash using
               keys() in this way (but you needn't worry about
               doing this by accident, as trying has no effect).

               See also each(), values() and sort().

       kill LIST
               Sends a signal to a list of processes.  The first
               element of the list must be the signal to send.
               Returns the number of processes successfully
               signaled.

                   $cnt = kill 1, $child1, $child2;
                   kill 9, @goners;

               Unlike in the shell, in Perl if the SIGNAL is
               negative, it kills process groups instead of
               processes.  (On System V, a negative PROCESS
               number will also kill process groups, but that's
               not portable.)  That means you usually want to use
               positive not negative signals.  You may also use a
               signal name in quotes.  See the section on Signals
               in the perlipc manpage for details.

       last LABEL

       last    The last command is like the break statement in C
               (as used in loops); it immediately exits the loop
               in question.  If the LABEL is omitted, the command
               refers to the innermost enclosing loop.  The
               continue block, if any, is not executed:

                   LINE: while (<STDIN>) {
                       last LINE if /^$/;      # exit when done with header
                       #...
                   }

               last cannot be used to exit a block which returns
               a value such as eval {}, sub {} or do {}, and
               should not be used to exit a grep() or map()
               operation.

               See also the continue entry elsewhere in this
               documentfor an illustration of how last, next, and
               redo work.

       lc EXPR

       lc      Returns an lowercased version of EXPR.  This is
               the internal function implementing the \L escape
               in double-quoted strings.  Respects current
               LC_CTYPE locale if use locale in force.  See the
               perllocale manpage.

               If EXPR is omitted, uses $_.

       lcfirst EXPR

       lcfirst Returns the value of EXPR with the first character
               lowercased.  This is the internal function
               implementing the \l escape in double-quoted
               strings.  Respects current LC_CTYPE locale if use
               locale in force.  See the perllocale manpage.

               If EXPR is omitted, uses $_.

       length EXPR

       length  Returns the length in characters of the value of
               EXPR.  If EXPR is omitted, returns length of $_.
               Note that this cannot be used on an entire array
               or hash to find out how many elements these have.
               For that, use scalar @array and scalar keys %hash
               respectively.

       link OLDFILE,NEWFILE
               Creates a new filename linked to the old filename.
               Returns TRUE for success, FALSE otherwise.

       listen SOCKET,QUEUESIZE
               Does the same thing that the listen system call
               does.  Returns TRUE if it succeeded, FALSE
               otherwise.  See the example in the section on
               Sockets: Client/Server Communication in the
               perlipc manpage.

       local EXPR
               You really probably want to be using my() instead,
               because local() isn't what most people think of as
               "local".  See the section on Private Variables via
               my() in the perlsub manpage for details.

               A local modifies the listed variables to be local
               to the enclosing block, file, or eval.  If more
               than one value is listed, the list must be placed
               in parentheses.  See the section on Temporary
               Values via local() in the perlsub manpage for
               details, including issues with tied arrays and
               hashes.

       localtime EXPR
               Converts a time as returned by the time function
               to a 9-element array with the time analyzed for
               the local time zone.  Typically used as follows:

                   #  0    1    2     3     4    5     6     7     8
                   ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
                                                               localtime(time);

               All array elements are numeric, and come straight
               out of a struct tm.  In particular this means that
               $mon has the range 0..11 and $wday has the range
               0..6 with sunday as day 0.  Also, $year is the
               number of years since 1900, that is, $year is 123
               in year 2023, and not simply the last two digits
               of the year.  If you assume it is, then you create
               non-Y2K-compliant programs--and you wouldn't want
               to do that, would you?

               If EXPR is omitted, uses the current time
               (localtime(time)).

               In scalar context, returns the ctime(3) value:

                   $now_string = localtime;  # e.g., "Thu Oct 13 04:54:34 1994"

               This scalar value is nnoott locale dependent, see the
               perllocale manpage, but instead a Perl builtin.
               Also see the Time::Local module, and the
               strftime(3) and mktime(3) function available via
               the POSIX module.  To get somewhat similar but
               locale dependent date strings, set up your locale
               environment variables appropriately (please see
               the perllocale manpage) and try for example:

                   use POSIX qw(strftime);
                   $now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;

               Note that the %a and %b, the short forms of the
               day of the week and the month of the year, may not
               necessarily be three characters wide.

       log EXPR

       log     Returns the natural logarithm (base e) of EXPR.
               If EXPR is omitted, returns log of $_.  To get the
               log of another base, use basic algebra: The base-N
               log of a number is is equal to the natural log of
               that number divided by the natural log of N.  For
               example:

                   sub log10 {
                       my $n = shift;
                       return log($n)/log(10);
                   }

               See also the exp entry elsewhere in this
               documentfor the inverse operation.

       lstat FILEHANDLE

       lstat EXPR

       lstat   Does the same thing as the stat() function
               (including setting the special _ filehandle) but
               stats a symbolic link instead of the file the
               symbolic link points to.  If symbolic links are
               unimplemented on your system, a normal stat() is
               done.

               If EXPR is omitted, stats $_.

       m//     The match operator.  See the perlop manpage.

       map BLOCK LIST

       map EXPR,LIST
               Evaluates the BLOCK or EXPR for each element of
               LIST (locally setting $_ to each element) and
               returns the list value composed of the results of
               each such evaluation.  Evaluates BLOCK or EXPR in
               a list context, so each element of LIST may
               produce zero, one, or more elements in the
               returned value.

               In scalar context, returns the total number of
               elements so generated.

                   @chars = map(chr, @nums);

               translates a list of numbers to the corresponding
               characters.  And

                   %hash = map { getkey($_) => $_ } @array;

               is just a funny way to write

                   %hash = ();
                   foreach $_ (@array) {
                       $hash{getkey($_)} = $_;
                   }

               Note that, because $_ is a reference into the list
               value, it can be used to modify the elements of
               the array.  While this is useful and supported, it
               can cause bizarre results if the LIST is not a
               named array.  Using a regular foreach loop for
               this purpose would be clearer in most cases.  See
               also the grep entry elsewhere in this documentfor
               an array composed of those items of the original
               list for which the BLOCK or EXPR evaluates to
               true.

       mkdir FILENAME,MODE
               Creates the directory specified by FILENAME, with
               permissions specified by MODE (as modified by
               umask).  If it succeeds it returns TRUE, otherwise
               it returns FALSE and sets $! (errno).

               In general, it is better to create directories
               with permissive MODEs, and let the user modify
               that with their umask, than it is to supply a
               restrictive MODE and give the user no way to be
               more permissive.  The exceptions to this rule are
               when the file or directory should be kept private
               (mail files, for instance).  The perlfunc(1) entry
               on umask discusses the choice of MODE in more
               detail.

       msgctl ID,CMD,ARG
               Calls the System V IPC function msgctl(2).  You'll
               probably have to say

                   use IPC::SysV;

               first to get the correct constant definitions.  If
               CMD is IPC_STAT, then ARG must be a variable which
               will hold the returned msqid_ds structure.
               Returns like ioctl(): the undefined value for
               error, "0 but true" for zero, or the actual return
               value otherwise.  See also IPC::SysV and
               IPC::Semaphore::Msg documentation.

       msgget KEY,FLAGS
               Calls the System V IPC function msgget(2).
               Returns the message queue id, or the undefined
               value if there is an error.  See also IPC::SysV
               and IPC::SysV::Msg documentation.

       msgsnd ID,MSG,FLAGS
               Calls the System V IPC function msgsnd to send the
               message MSG to the message queue ID.  MSG must
               begin with the long integer message type, which
               may be created with pack("l", $type).  Returns
               TRUE if successful, or FALSE if there is an error.
               See also IPC::SysV and IPC::SysV::Msg
               documentation.

       msgrcv ID,VAR,SIZE,TYPE,FLAGS
               Calls the System V IPC function msgrcv to receive
               a message from message queue ID into variable VAR
               with a maximum message size of SIZE.  Note that if
               a message is received, the message type will be
               the first thing in VAR, and the maximum length of
               VAR is SIZE plus the size of the message type.
               Returns TRUE if successful, or FALSE if there is
               an error.  See also IPC::SysV and IPC::SysV::Msg
               documentation.

       my EXPR A my() declares the listed variables to be local
               (lexically) to the enclosing block, file, or
               eval().  If more than one value is listed, the
               list must be placed in parentheses.  See the
               section on Private Variables via my() in the
               perlsub manpage for details.

       next LABEL

       next    The next command is like the continue statement in
               C; it starts the next iteration of the loop:

                   LINE: while (<STDIN>) {
                       next LINE if /^#/;      # discard comments
                       #...
                   }

               Note that if there were a continue block on the
               above, it would get executed even on discarded
               lines.  If the LABEL is omitted, the command
               refers to the innermost enclosing loop.

               next cannot be used to exit a block which returns
               a value such as eval {}, sub {} or do {}, and
               should not be used to exit a grep() or map()
               operation.

               See also the continue entry elsewhere in this
               documentfor an illustration of how last, next, and
               redo work.

       no Module LIST
               See the the use entry elsewhere in this
               documentfunction, which no is the opposite of.

       oct EXPR

       oct     Interprets EXPR as an octal string and returns the
               corresponding value.  (If EXPR happens to start
               off with 0x, interprets it as a hex string.  If
               EXPR starts off with 0b, it is interpreted as a
               binary string.)  The following will handle
               decimal, binary, octal, and hex in the standard
               Perl or C notation:

                   $val = oct($val) if $val =~ /^0/;

               If EXPR is omitted, uses $_.  This function is
               commonly used when a string such as 644 needs to
               be converted into a file mode, for example.
               (Although perl will automatically convert strings
               into numbers as needed, this automatic conversion
               assumes base 10.)

       open FILEHANDLE,EXPR

       open FILEHANDLE
               Opens the file whose filename is given by EXPR,
               and associates it with FILEHANDLE.  If FILEHANDLE
               is an expression, its value is used as the name of
               the real filehandle wanted.  If EXPR is omitted,
               the scalar variable of the same name as the
               FILEHANDLE contains the filename.  (Note that
               lexical variables--those declared with my()--will
               not work for this purpose; so if you're using
               my(), specify EXPR in your call to open.)  See the
               perlopentut manpage for a kinder, gentler
               explanation of opening files.

               If the filename begins with '<' or nothing, the
               file is opened for input.  If the filename begins
               with '>', the file is truncated and opened for
               output, being created if necessary. If the
               filename begins with '>>', the file is opened for
               appending, again being created if necessary.  You
               can put a '+' in front of the '>' or '<' to
               indicate that you want both read and write access
               to the file; thus '+<' is almost always preferred
               for read/write updates--the '+>' mode would
               clobber the file first.  You can't usually use
               either read-write mode for updating textfiles,
               since they have variable length records.  See the
               --ii switch in the perlrun manpage for a better
               approach.  The file is created with permissions of
               0666 modified by the process' umask value.

               The prefix and the filename may be separated with
               spaces.  These various prefixes correspond to the
               fopen(3) modes of 'r', 'r+', 'w', 'w+', 'a', and
               'a+'.

               If the filename begins with '|', the filename is
               interpreted as a command to which output is to be
               piped, and if the filename ends with a '|', the
               filename is interpreted as a command which pipes
               output to us.  See the section on Using open() for
               IPC in the perlipc manpage for more examples of
               this.  (You are not allowed to open() to a command
               that pipes both in and out, but see the IPC::Open2
               manpage, the IPC::Open3 manpage, and the section
               on Bidirectional Communication in the perlipc
               manpage for alternatives.)

               Opening '-' opens STDIN and opening '>-' opens
               STDOUT.  Open returns nonzero upon success, the
               undefined value otherwise.  If the open() involved
               a pipe, the return value happens to be the pid of
               the subprocess.

               If you're unfortunate enough to be running Perl on
               a system that distinguishes between text files and
               binary files (modern operating systems don't
               care), then you should check out the binmode entry
               elsewhere in this documentfor tips for dealing
               with this.  The key distinction between systems
               that need binmode() and those that don't is their
               text file formats.  Systems like Unix, MacOS, and
               Plan9, which delimit lines with a single
               character, and which encode that character in C as
               "\n", do not need binmode().  The rest need it.

               When opening a file, it's usually a bad idea to
               continue normal execution if the request failed,
               so open() is frequently used in connection with
               die(). Even if die() won't do what you want (say,
               in a CGI script, where you want to make a nicely
               formatted error message (but there are modules
               that can help with that problem)) you should
               always check the return value from opening a file.
               The infrequent exception is when working with an
               unopened filehandle is actually what you want to
               do.

               Examples:

                   $ARTICLE = 100;
                   open ARTICLE or die "Can't find article $ARTICLE: $!\n";
                   while (<ARTICLE>) {...

                   open(LOG, '>>/usr/spool/news/twitlog'); # (log is reserved)
                   # if the open fails, output is discarded

                   open(DBASE, '+<dbase.mine')             # open for update
                       or die "Can't open 'dbase.mine' for update: $!";

                   open(ARTICLE, "caesar <$article |")     # decrypt article
                       or die "Can't start caesar: $!";

                   open(EXTRACT, "|sort >/tmp/Tmp$$")      # $$ is our process id
                       or die "Can't start sort: $!";

                   # process argument list of files along with any includes

                   foreach $file (@ARGV) {
                       process($file, 'fh00');
                   }

                   sub process {
                       my($filename, $input) = @_;
                       $input++;               # this is a string increment
                       unless (open($input, $filename)) {
                           print STDERR "Can't open $filename: $!\n";
                           return;
                       }

                       local $_;
                       while (<$input>) {              # note use of indirection
                           if (/^#include "(.*)"/) {
                               process($1, $input);
                               next;
                           }
                           #...                # whatever
                       }
                   }

               You may also, in the Bourne shell tradition,
               specify an EXPR beginning with '>&', in which case
               the rest of the string is interpreted as the name
               of a filehandle (or file descriptor, if numeric)
               to be duped and opened.  You may use & after >,
               >>, <, +>, +>>, and +<.  The mode you specify
               should match the mode of the original filehandle.
               (Duping a filehandle does not take into account
               any existing contents of stdio buffers.)  Here is
               a script that saves, redirects, and restores
               STDOUT and STDERR:

                   #!/usr/bin/perl
                   open(OLDOUT, ">&STDOUT");
                   open(OLDERR, ">&STDERR");

                   open(STDOUT, ">foo.out") || die "Can't redirect stdout";
                   open(STDERR, ">&STDOUT") || die "Can't dup stdout";

                   select(STDERR); $| = 1;     # make unbuffered
                   select(STDOUT); $| = 1;     # make unbuffered

                   print STDOUT "stdout 1\n";  # this works for
                   print STDERR "stderr 1\n";  # subprocesses too

                   close(STDOUT);
                   close(STDERR);

                   open(STDOUT, ">&OLDOUT");
                   open(STDERR, ">&OLDERR");

                   print STDOUT "stdout 2\n";
                   print STDERR "stderr 2\n";

               If you specify '<&=N', where N is a number, then
               Perl will do an equivalent of C's fdopen() of that
               file descriptor; this is more parsimonious of file
               descriptors.  For example:

                   open(FILEHANDLE, "<&=$fd")

               If you open a pipe on the command '-', i.e.,
               either '|-' or '-|', then there is an implicit
               fork done, and the return value of open is the pid
               of the child within the parent process, and 0
               within the child process.  (Use defined($pid) to
               determine whether the open was successful.)  The
               filehandle behaves normally for the parent, but
               i/o to that filehandle is piped from/to the
               STDOUT/STDIN of the child process.  In the child
               process the filehandle isn't opened--i/o happens
               from/to the new STDOUT or STDIN.  Typically this
               is used like the normal piped open when you want
               to exercise more control over just how the pipe
               command gets executed, such as when you are
               running setuid, and don't want to have to scan
               shell commands for metacharacters.  The following
               pairs are more or less equivalent:

                   open(FOO, "|tr '[a-z]' '[A-Z]'");
                   open(FOO, "|-") || exec 'tr', '[a-z]', '[A-Z]';

                   open(FOO, "cat -n '$file'|");
                   open(FOO, "-|") || exec 'cat', '-n', $file;

               See the section on Safe Pipe Opens in the perlipc
               manpage for more examples of this.

               NOTE: On any operation that may do a fork, any
               unflushed buffers remain unflushed in both
               processes, which means you may need to set $| to
               avoid duplicate output.  On systems that support a
               close-on-exec flag on files, the flag will be set
               for the newly opened file descriptor as determined
               by the value of $^F.  See the section on $^F in
               the perlvar manpage.