PERLFUNC(1)

PERLFUNC(1)

perlform Home Page User Commands Index perlguts


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
       and 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 list
       argument.)  For instance, splice() has three scalar
       arguments followed by a list.

       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.

       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 rule:

       THERE IS NO GENERAL RULE FOR CONVERTING A LIST INTO A
               SCALAR!

       Each operator and function decides which sort of value it
       would be most appropriate to return in a scalar context.
       Some operators return the length of the list that would
       have been returned in a 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.

       PPeerrll FFuunnccttiioonnss bbyy CCaatteeggoorryy

       Here are Perl's functions (including things that look like
       functions, like some of the 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

       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

       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).
                   -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.
               The interpretation of the file permission
               operators -r, -R, -w, -W, -x, and -X is 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.
               Also note that, for the superuser, -r, -R, -w, and
               -W 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 the uid to something else.
               Example:
                   while (<>) {
                       chop;
                       next unless -f $_;      # ignore specials
                       ...
                   }
               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 odd
               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
               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 syscall() interface to access
               setitimer(2) if your system supports it, or else
               see the select() entry elsewhere in this document
               .  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.
                   eval {
                       local $SIG{ALRM} = sub { die "alarm\n" };       # NB \n required
                       alarm $timeout;
                       $nread = sysread SOCKET, $buffer, $size;
                       alarm 0;
                   };
                   die if $@ && $@ ne "alarm\n";       # propagate errors
                   if ($@) {
                       # 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 Unix;
               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 and Plan9 that delimit lines with a single
               character, and that encode that character in C as
               '\n', do not need binmode.  The rest need it.  If
               FILEHANDLE is an expression, the value is taken as
               the name of the filehandle.

       bless REF,CLASSNAME

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

       caller EXPR

       caller  Returns the context of the current subroutine
               call.  In a 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 a 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.

       chdir EXPR
               Changes the working directory to EXPR, if
               possible.  If EXPR is omitted, changes to home
               directory.  Returns TRUE upon success, FALSE
               otherwise.  See 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 document if 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 is a slightly safer version of the chop entry
               elsewhere in this document .  It removes any line
               ending 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 = <${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 as 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 of 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 chroot to $_.

       close FILEHANDLE
               Closes the file or pipe associated with the file
               handle, returning TRUE only if stdio successfully
               flushes buffers and closes the system file
               descriptor.
               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.) Also, closing a pipe will wait for the
               process executing on the pipe to complete, in case
               you want to look at the output of the pipe
               afterwards.  Closing a pipe explicitly also puts
               the exit status value of the 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 gives
               the real filehandle name.

       closedir DIRHANDLE
               Closes a directory opened by opendir().

       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).

       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.)
               Here's an example that makes sure that whoever
               runs this program knows their own password:
                   $pwd = (getpwuid($<))[1];
                   $salt = substr($pwd, 0, 2);
                   system "stty -echo";
                   print "Password: ";
                   chop($word = <STDIN>);
                   print "\n";
                   system "stty echo";
                   if (crypt($word, $salt) 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 superseded by the untie()
               function.]
               Breaks the binding between a DBM file and a hash.

       dbmopen HASH,DBNAME,MODE
               [This function has been superseded by the tie()
               function.]
               This binds a dbm(3), ndbm(3), sdbm(3), gdbm(), 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 array values 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.

       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.  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 document for 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 0 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 shoudln'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.
               This counterintuitive behaviour 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 the undef()
               command.)  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 of 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.  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() and warn().
               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.
               You can arrange for a callback to be called 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 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).

       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 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, more concise,
               keeps track of the current filename for error
               messages, and searches all the --II libraries if the
               file isn't in the current directory (see also the
               @INC array in the section on Predefined Names in
               the perlvar manpage).  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.
               Note that inclusion of library modules is better
               done with the use() and require() operators, which
               also do error checking and raise an exception if
               there's a problem.

       dump LABEL
               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');

       each HASH
               When called in a list context, returns a 2-element
               array consisting of the key and value for the next
               element of a hash, so that you can iterate over
               it.  When called in a 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.  When the hash is entirely read, a null
               array is returned in list context (which when
               assigned produces a FALSE (0) value), and undef is
               returned in a 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() and values().

       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 name.  (Note that this
               function actually reads a character and then
               ungetc()s it, so it is not 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.  Empty parentheses () may be used to
               indicate 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 (<>) {
                       print "$.\t$_";
                       close(ARGV) if (eof);   # Not eof().
                   }
                   # insert dashes just before last line of last file
                   while (<>) {
                       if (eof()) {
                           print "--------------\n";
                           close(ARGV);        # close or break; 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 undef
               when they run out of data.

       eval EXPR

       eval BLOCK
               EXPR is parsed and executed as if it were a little
               Perl program.  It is executed in the context of
               the current Perl program, so that any variable
               settings or subroutine and format definitions
               remain afterwards.  The value returned is the
               value of the last expression evaluated, or a
               return statement may be used, just as with
               subroutines.  The last expression is evaluated in
               scalar or array context, depending on the context
               of the eval.
               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.  If EXPR is omitted,
               evaluates $_.  The final semicolon, if any, may be
               omitted from the expression.  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
               warn() 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 = };
                   # a run-time error
                   eval '$answer =';   # sets $@
               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 foofs here" };
                      print $@ if $@;                # prints "bar barfs here"
                   }
               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.

       exec 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).
               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, 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.

       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->[$x][$y]{$key}) { ... }

       exit EXPR
               Evaluates EXPR and exits immediately with that
               value.  (Actually, it calls any defined END
               routines first, but the END routines may not abort
               the exit.  Likewise any object destructors that
               need to be called are called before exit.)
               Example:
                   $ans = <STDIN>;
                   exit 0 if $ans =~ /^[Xx]/;
               See also die().  If EXPR is omitted, exits with 0
               status.  The only universally portable values for
               EXPR are 0 for success and 1 for error; all other
               values are subject to unpredictable interpretation
               depending on the environment in which the Perl
               program is running.
               You shouldn'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().

       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 function definitions.
               Argument processing and value return works just
               like ioctl() below.  Note that fcntl() will
               produce a fatal error if used on a machine that
               doesn't implement fcntl(2).  For example:
                   use Fcntl;
                   fcntl($filehandle, F_GETLK, $packed_return_buffer);

       fileno FILEHANDLE
               Returns the file descriptor for a filehandle.
               This is useful for constructing bitmaps for
               select().  If FILEHANDLE is an expression, the
               value is taken as the name of the filehandle.

       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.
               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 mis-coordination, Perl
               flushes FILEHANDLE before (un)locking 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
               (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();
               See also the DB_File manpage for other flock()
               examples.

       fork    Does a fork(2) system call.  Returns the child pid
               to the parent process and 0 to the child process,
               or undef if the fork is unsuccessful.  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:
                   $SIG{CHLD} = sub { wait };
               There's also the double-fork trick (error checking
               on fork() returns omitted);
                   unless ($pid = fork) {
                       unless (fork) {
                           exec "what you really wanna do";
                           die "no exec";
                           # ... or ...
                           ## (some_perl_code_here)
                           exit 0;
                       }
                       exit 0;
                   }
                   waitpid($pid,0);
               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, the remote server (such as, say, httpd
               or rsh) won't think you're done.  You should
               reopen those to /dev/null if it's any issue.

       format  Declare a picture format with 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 a null string at end of
               file.  If FILEHANDLE is omitted, reads from STDIN.
               This is not particularly efficient.  It cannot be
               used to get unbuffered single-characters, however.
               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 alleging 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 perlmod manpage.

       getlogin
               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.  Within a list
               context, the return values from the various get
               routines are as follows:
                   ($name,$passwd,$uid,$gid,
                      $quota,$comment,$gcos,$dir,$shell) = 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.)
               Within a 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 = getpwuid
                   $name = getpwent
                   $gid = getgrnam
                   $name = getgrgid
                   $name = getgrent
                   etc.
               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]);

       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 undefined
               if there is an error.

       glob EXPR

       glob    Returns the value of EXPR with filename expansions
               such as a shell 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, not simply the last
               two digits of the year.
               If EXPR is omitted, does gmtime(time()).
               In a 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.

       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 a 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 like the way that the
               section on Foreach Loops'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.
               See also the map entry elsewhere in this document
               for an array composed of the results of the BLOCK
               or EXPR.  =item hex EXPR

       hex     Interprets EXPR as a hex string and returns the
               corresponding value.  (To convert strings that
               might start with either 0 or 0x 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
               merely 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 document the
               perlmod manpage, and the Exporter manpage.

       index STR,SUBSTR,POSITION

       index STR,SUBSTR
               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 $_.

       ioctl FILEHANDLE,FUNCTION,SCALAR
               Implements the ioctl(2) function.  You'll probably
               have to say
                   require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph
               first 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 &lt;sys/ioctl.h>.  (There
               is a Perl script called hh22pphh that comes with the
               Perl kit which 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(...)) || ($retval = -1);
                   printf "System returned %d\n", $retval;

       join EXPR,LIST
               Joins the separate strings of LIST into a single
               string with fields separated by the value of EXPR,
               and returns the string.  Example:
                   $_ = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
               See the split entry in the perlfunc manpage.

       keys HASH
               Returns a normal array 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, but it is 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 an array 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.  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).

       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
                       ...
                   }

       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 $_.

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

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

       local EXPR
               A local modifies the listed variables to be local
               to the enclosing block, subroutine, eval{}, or do.
               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.
               But 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.

       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.
               If EXPR is omitted, uses the current time
               (localtime(time)).
               In a 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.

       log EXPR

       log     Returns logarithm (base e) of EXPR.  If EXPR is
               omitted, returns log of $_.

       lstat FILEHANDLE

       lstat EXPR

       lstat   Does the same thing as the stat() function, 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.
                   @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.  See also the grep entry elsewhere in
               this document for 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 1, otherwise it
               returns 0 and sets $! (errno).

       msgctl ID,CMD,ARG
               Calls the System V IPC function msgctl(2).  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.

       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.

       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.

       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.

       my EXPR A "my" declares the listed variables to be local
               (lexically) to the enclosing block, subroutine,
               eval, or do/require/use'd file.  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.

       no Module LIST
               See the "use" function, 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
               instead.)  The following will handle decimal,
               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.)
               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.  If the filename begins with '>>', the
               file is opened for appending.  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.  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 See the section on Using
               open() for IPC in the perlipc manpage for more
               examples of this.  as command which pipes input to
               us.  (You may not have a raw 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 document for 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 and Plan9
               that delimit lines with a single character, and
               that 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 which 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, '+/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 {
                       local($filename, $input) = @_;
                       $input++;               # this is a string increment
                       unless (open($input, $filename)) {
                           print STDERR "Can't open $filename: $!\n";
                           return;
                       }
                       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)
               which is 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(SAVEOUT, ">&STDOUT");
                   open(SAVEERR, ">&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, ">&SAVEOUT");
                   open(STDERR, ">&SAVEERR");
                   print STDOUT "stdout 2\n";
                   print STDERR "stderr 2\n";
               If you specify "<&=N", where N is a number, then
               Perl will