PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
NAME
perlfunc - Perl builtin functions
DESCRIPTION
The functions in this section can serve as terms in an
expression. They fall into two major categories: list
operators and named unary operators. These differ in
their precedence relationship with a following comma.
(See the precedence table in the perlop manpage.) List
operators take more than one argument, while unary
operators can never take more than one argument. Thus, a
comma terminates the argument of a unary operator, but
merely separates the arguments of a list operator. A
unary operator generally provides a scalar context to its
argument, while a list operator may provide either scalar
or list contexts for its arguments. If it does both, the
scalar arguments will be first, and the list argument will
follow. (Note that there can ever be only one such list
argument.) For instance, splice() has three scalar
arguments followed by a list, whereas gethostbyname() has
four scalar arguments.
In the syntax descriptions that follow, list operators
that expect a list (and provide list context for the
elements of the list) are shown with LIST as an argument.
Such a list may consist of any combination of scalar
arguments or list values; the list values will be included
in the list as if each individual element were
interpolated at that point in the list, forming a longer
single-dimensional list value. Elements of the LIST
should be separated by commas.
Any function in the list below may be used either with or
without parentheses around its arguments. (The syntax
descriptions omit the parentheses.) If you use the
parentheses, the simple (but occasionally surprising) rule
is this: It LOOKS like a function, therefore it IS a
function, and precedence doesn't matter. Otherwise it's a
list operator or unary operator, and precedence does
matter. And whitespace between the function and left
parenthesis doesn't count--so you need to be careful
sometimes:
print 1+2+4; # Prints 7.
print(1+2) + 4; # Prints 3.
print (1+2)+4; # Also prints 3!
print +(1+2)+4; # Prints 7.
print ((1+2)+4); # Prints 7.
If you run Perl with the -w 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.
29/Apr/1999 perl 5.005, patch 03 1
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
A few functions take no arguments at all, and therefore
work as neither unary nor list operators. These include
such functions as time and endpwent. For example,
time+86_400 always means time() + 86_400.
For functions that can be used in either a scalar or list
context, nonabortive failure is generally indicated in a
scalar context by returning the undefined value, and in a
list context by returning the null list.
Remember the following important rule: There is no rule
that relates the behavior of an expression in list context
to its behavior in scalar context, or vice versa. It
might do two totally different things. Each operator and
function decides which sort of value it would be most
appropriate to return in scalar context. Some operators
return the length of the list that would have been
returned in list context. Some operators return the first
value in the list. Some operators return the last value
in the list. Some operators return a count of successful
operations. In general, they do what you want, unless you
want consistency.
An named array in scalar context is quite different from
what would at first glance appear to be a list in scalar
context. You can't get a list like (1,2,3) into being in
scalar context, because the compiler knows the context at
compile time. It would generate the scalar comma operator
there, not the list construction version of the comma.
That means it was never a list to start with.
In general, functions in Perl that serve as wrappers for
system calls of the same name (like chown(2), fork(2),
closedir(2), etc.) all return true when they succeed and
undef otherwise, as is usually mentioned in the
descriptions below. This is different from the C
interfaces, which return -1 on failure. Exceptions to
this rule are wait(), waitpid(), and syscall(). System
calls also set the special $! variable on failure. Other
functions do not, except accidentally.
Perl Functions by Category
Here are Perl's functions (including things that look like
functions, like some keywords and named operators)
arranged by category. Some functions appear in more than
one place.
Functions for SCALARs or strings
chomp, chop, chr, crypt, hex, index, lc, lcfirst,
length, oct, ord, pack, q/STRING/, qq/STRING/,
reverse, rindex, sprintf, substr, tr///, uc, ucfirst,
y///
29/Apr/1999 perl 5.005, patch 03 2
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
Regular expressions and pattern matching
m//, pos, quotemeta, s///, split, study, qr//
Numeric functions
abs, atan2, cos, exp, hex, int, log, oct, rand, sin,
sqrt, srand
Functions for real @ARRAYs
pop, push, shift, splice, unshift
Functions for list data
grep, join, map, qw/STRING/, reverse, sort, unpack
Functions for real %HASHes
delete, each, exists, keys, values
Input and output functions
binmode, close, closedir, dbmclose, dbmopen, die,
eof, fileno, flock, format, getc, print, printf,
read, readdir, rewinddir, seek, seekdir, select,
syscall, sysread, sysseek, syswrite, tell, telldir,
truncate, warn, write
Functions for fixed length data or records
pack, read, syscall, sysread, syswrite, unpack, vec
Functions for filehandles, files, or directories
-X, chdir, chmod, chown, chroot, fcntl, glob, ioctl,
link, lstat, mkdir, open, opendir, readlink, rename,
rmdir, stat, symlink, umask, unlink, utime
Keywords related to the control flow of your perl program
caller, continue, die, do, dump, eval, exit, goto,
last, next, redo, return, sub, wantarray
Keywords related to scoping
caller, import, local, my, package, use
Miscellaneous functions
defined, dump, eval, formline, local, my, reset,
scalar, undef, wantarray
Functions for processes and process groups
alarm, exec, fork, getpgrp, getppid, getpriority,
kill, pipe, qx/STRING/, setpgrp, setpriority, sleep,
system, times, wait, waitpid
Keywords related to perl modules
do, import, no, package, require, use
Keywords related to classes and object-orientedness
bless, dbmclose, dbmopen, package, ref, tie, tied,
untie, use
29/Apr/1999 perl 5.005, patch 03 3
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
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
Portability
Perl was born in Unix and can therefore access all common
Unix system calls. In non-Unix environments, the
functionality of some Unix system calls may not be
available, or details of the available functionality may
differ slightly. The Perl functions affected by this are:
-X, binmode, chmod, chown, chroot, crypt, dbmclose,
dbmopen, dump, endgrent, endhostent, endnetent,
endprotoent, endpwent, endservent, exec, fcntl, flock,
fork, getgrent, getgrgid, gethostent, getlogin,
getnetbyaddr, getnetbyname, getnetent, getppid, getprgp,
getpriority, getprotobynumber, getprotoent, getpwent,
getpwnam, getpwuid, getservbyport, getservent, getsockopt,
glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv,
msgsnd, open, pipe, readlink, rename, select, semctl,
29/Apr/1999 perl 5.005, patch 03 4
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
semget, semop, setgrent, sethostent, setnetent, setpgrp,
setpriority, setprotoent, setpwent, setservent,
setsockopt, shmctl, shmget, shmread, shmwrite, socket,
socketpair, stat, symlink, syscall, sysopen, system,
times, truncate, umask, unlink, utime, wait, waitpid
For more information about the portability of these
functions, see the perlport manpage and other available
platform-specific documentation.
Alphabetical Listing of Perl Functions
-X FILEHANDLE
-X EXPR
-X A file test, where X is one of the letters listed
below. This unary operator takes one argument,
either a filename or a filehandle, and tests the
associated file to see if something is true about
it. If the argument is omitted, tests $_, except
for -t, which tests STDIN. Unless otherwise
documented, it returns 1 for TRUE and '' for
FALSE, or the undefined value if the file doesn't
exist. Despite the funny names, precedence is the
same as any other named unary operator, and the
argument may be parenthesized like any other unary
operator. The operator may be any of:
-r File is readable by effective uid/gid.
-w File is writable by effective uid/gid.
-x File is executable by effective uid/gid.
-o File is owned by effective uid.
-R File is readable by real uid/gid.
-W File is writable by real uid/gid.
-X File is executable by real uid/gid.
-O File is owned by real uid.
-e File exists.
-z File has zero size.
-s File has nonzero size (returns size).
-f File is a plain file.
-d File is a directory.
-l File is a symbolic link.
-p File is a named pipe (FIFO), or Filehandle is a pipe.
-S File is a socket.
-b File is a block special file.
-c File is a character special file.
-t Filehandle is opened to a tty.
29/Apr/1999 perl 5.005, patch 03 5
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
-u File has setuid bit set.
-g File has setgid bit set.
-k File has sticky bit set.
-T File is a text file.
-B File is a binary file (opposite of -T).
-M Age of file in days when script started.
-A Same for access time.
-C Same for inode change time.
Example:
while (<>) {
chop;
next unless -f $_; # ignore specials
#...
}
The interpretation of the file permission
operators -r, -R, -w, -W, -x, and -X is by default
based solely on the mode of the file and the uids
and gids of the user. There may be other reasons
you can't actually read, write, or execute the
file. Such reasons may be for example network
filesystem access controls, ACLs (access control
lists), read-only filesystems, and unrecognized
executable formats.
Also note that, for the superuser on the local
filesystems, the -r, -R, -w, and -W tests always
return 1, and -x and -X return 1 if any execute
bit is set in the mode. Scripts run by the
superuser may thus need to do a stat() to
determine the actual mode of the file, or
temporarily set their effective uid to something
else.
Note that -s/a/b/ does not do a negated
substitution. Saying -exp($foo) still works as
expected, however--only single letters following a
minus are interpreted as file tests.
The -T and -B switches work as follows. The first
block or so of the file is examined for odd
characters such as strange control codes or
characters with the high bit set. If too many
strange characters (>30%) are found, it's a -B
file, otherwise it's a -T file. Also, any file
containing null in the first block is considered a
binary file. If -T or -B is used on a filehandle,
the current stdio buffer is examined rather than
the first block. Both -T and -B return TRUE on a
null file, or a file at EOF when testing a
29/Apr/1999 perl 5.005, patch 03 6
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
filehandle. Because you have to read a file to do
the -T test, on most occasions you want to use a
-f against the file first, as in next unless -f
$file && -T $file.
If any of the file tests (or either the stat() or
lstat() operators) are given the special
filehandle consisting of a solitary underline,
then the stat structure of the previous file test
(or stat operator) is used, saving a system call.
(This doesn't work with -t, and you need to
remember that lstat() and -l will leave values in
the stat structure for the symbolic link, not the
real file.) Example:
print "Can do.\n" if -r $a || -w _ || -x _;
stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;
abs VALUE
abs Returns the absolute value of its argument. If
VALUE is omitted, uses $_.
accept NEWSOCKET,GENERICSOCKET
Accepts an incoming socket connect, just as the
accept(2) system call does. Returns the packed
address if it succeeded, FALSE otherwise. See the
example in the section on Sockets: Client/Server
Communication in the perlipc manpage.
alarm SECONDS
alarm Arranges to have a SIGALRM delivered to this
process after the specified number of seconds have
elapsed. If SECONDS is not specified, the value
stored in $_ is used. (On some machines,
unfortunately, the elapsed time may be up to one
second less than you specified because of how
seconds are counted.) Only one timer may be
counting at once. Each call disables the previous
timer, and an argument of 0 may be supplied to
cancel the previous timer without starting a new
one. The returned value is the amount of time
remaining on the previous timer.
29/Apr/1999 perl 5.005, patch 03 7
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
For delays of finer granularity than one second,
you may use Perl's four-arugment version of
select() leaving the first three arguments
undefined, or you might be able to use the
syscall() interface to access setitimer(2) if your
system supports it. The Time::HiRes module from
CPAN may also prove useful.
It is usually a mistake to intermix alarm() and
sleep() calls.
If you want to use alarm() to time out a system
call you need to use an eval()/die() pair. You
can't rely on the alarm causing the system call to
fail with $! set to EINTR because Perl sets up
signal handlers to restart system calls on some
systems. Using eval()/die() always works, modulo
the caveats given in the section on Signals in the
perlipc manpage.
eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required
alarm $timeout;
$nread = sysread SOCKET, $buffer, $size;
alarm 0;
};
if ($@) {
die unless $@ eq "alarm\n"; # propagate unexpected errors
# timed out
}
else {
# didn't
}
atan2 Y,X
Returns the arctangent of Y/X in the range -pi to
pi.
For the tangent operation, you may use the
POSIX::tan() function, or use the familiar
relation:
sub tan { sin($_[0]) / cos($_[0]) }
bind SOCKET,NAME
Binds a network address to a socket, just as the
bind system call does. Returns TRUE if it
succeeded, FALSE otherwise. NAME should be a
packed address of the appropriate type for the
socket. See the examples in the section on
Sockets: Client/Server Communication in the
perlipc manpage.
29/Apr/1999 perl 5.005, patch 03 8
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
binmode FILEHANDLE
Arranges for the file to be read or written in
"binary" mode in operating systems that
distinguish between binary and text files. Files
that are not in binary mode have CR LF sequences
translated to LF on input and LF translated to CR
LF on output. Binmode has no effect under many
sytems, but in MS-DOS and similarly archaic
systems, it may be imperative--otherwise your
MS-DOS-damaged C library may mangle your file.
The key distinction between systems that need
binmode() and those that don't is their text file
formats. Systems like Unix, MacOS, and Plan9 that
delimit lines with a single character, and that
encode that character in C as "\n", do not need
binmode(). The rest may need it. If FILEHANDLE
is an expression, the value is taken as the name
of the filehandle.
If the system does care about it, using it when
you shouldn't is just as perilous as failing to
use it when you should. Fortunately for most of
us, you can't go wrong using binmode() on systems
that don't care about it, though.
bless REF,CLASSNAME
bless REF
This function tells the thingy referenced by REF
that it is now an object in the CLASSNAME package.
If CLASSNAME is omitted, the current package is
used. Because a bless() is often the last thing
in a constructor. it returns the reference for
convenience. Always use the two-argument version
if the function doing the blessing might be
inherited by a derived class. See the perltoot
manpage and the perlobj manpage for more about the
blessing (and blessings) of objects.
Consider always blessing objects in CLASSNAMEs
that are mixed case. Namespaces with all
lowercase names are considered reserved for Perl
pragmata. Builtin types have all uppercase names,
so to prevent confusion, you may wish to avoid
such package names as well. Make sure that
CLASSNAME is a true value.
See the section on Perl Modules in the perlmod
manpage.
caller EXPR
caller Returns the context of the current subroutine
call. In scalar context, returns the caller's
29/Apr/1999 perl 5.005, patch 03 9
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
package name if there is a caller, that is, if
we're in a subroutine or eval() or require(), and
the undefined value otherwise. In list context,
returns
($package, $filename, $line) = caller;
With EXPR, it returns some extra information that
the debugger uses to print a stack trace. The
value of EXPR indicates how many call frames to go
back before the current one.
($package, $filename, $line, $subroutine,
$hasargs, $wantarray, $evaltext, $is_require) = caller($i);
Here $subroutine may be "(eval)" if the frame is
not a subroutine call, but an eval(). In such a
case additional elements $evaltext and $is_require
are set: $is_require is true if the frame is
created by a require or use statement, $evaltext
contains the text of the eval EXPR statement. In
particular, for a eval BLOCK statement, $filename
is "(eval)", but $evaltext is undefined. (Note
also that each use statement creates a require
frame inside an eval EXPR) frame.
Furthermore, when called from within the DB
package, caller returns more detailed information:
it sets the list variable @DB::args to be the
arguments with which the subroutine was invoked.
Be aware that the optimizer might have optimized
call frames away before caller() had a chance to
get the information. That means that caller(N)
might not return information about the call frame
you expect it do, for N > 1. In particular,
@DB::args might have information from the previous
time caller() was called.
chdir EXPR
Changes the working directory to EXPR, if
possible. If EXPR is omitted, changes to the
user's home directory. Returns TRUE upon success,
FALSE otherwise. See the example under die().
chmod LIST
Changes the permissions of a list of files. The
first element of the list must be the numerical
mode, which should probably be an octal number,
and which definitely should not a string of octal
digits: 0644 is okay, '0644' is not. Returns the
number of files successfully changed. See also
the oct entry elsewhere in this documentif all you
have is a string.
29/Apr/1999 perl 5.005, patch 03 10
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
$cnt = chmod 0755, 'foo', 'bar';
chmod 0755, @executables;
$mode = '0644'; chmod $mode, 'foo'; # !!! sets mode to
# --w----r-T
$mode = '0644'; chmod oct($mode), 'foo'; # this is better
$mode = 0644; chmod $mode, 'foo'; # this is best
chomp VARIABLE
chomp LIST
chomp This safer version of the chop entry elsewhere in
this documentremoves any trailing string that
corresponds to the current value of $/ (also known
as $INPUT_RECORD_SEPARATOR in the English module).
It returns the total number of characters removed
from all its arguments. It's often used to remove
the newline from the end of an input record when
you're worried that the final record may be
missing its newline. When in paragraph mode ($/ =
""), it removes all trailing newlines from the
string. If VARIABLE is omitted, it chomps $_.
Example:
while (<>) {
chomp; # avoid \n on last field
@array = split(/:/);
# ...
}
You can actually chomp anything that's an lvalue,
including an assignment:
chomp($cwd = `pwd`);
chomp($answer = <STDIN>);
If you chomp a list, each element is chomped, and
the total number of characters removed is
returned.
chop VARIABLE
chop LIST
chop Chops off the last character of a string and
returns the character chopped. It's used
primarily to remove the newline from the end of an
input record, but is much more efficient than
s/\n// because it neither scans nor copies the
string. If VARIABLE is omitted, chops $_.
Example:
29/Apr/1999 perl 5.005, patch 03 11
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
while (<>) {
chop; # avoid \n on last field
@array = split(/:/);
#...
}
You can actually chop anything that's an lvalue,
including an assignment:
chop($cwd = `pwd`);
chop($answer = <STDIN>);
If you chop a list, each element is chopped. Only
the value of the last chop() is returned.
Note that chop() returns the last character. To
return all but the last character, use
substr($string, 0, -1).
chown LIST
Changes the owner (and group) of a list of files.
The first two elements of the list must be the
NUMERICAL uid and gid, in that order. Returns the
number of files successfully changed.
$cnt = chown $uid, $gid, 'foo', 'bar';
chown $uid, $gid, @filenames;
Here's an example that looks up nonnumeric uids in
the passwd file:
print "User: ";
chop($user = <STDIN>);
print "Files: ";
chop($pattern = <STDIN>);
($login,$pass,$uid,$gid) = getpwnam($user)
or die "$user not in passwd file";
@ary = glob($pattern); # expand filenames
chown $uid, $gid, @ary;
On most systems, you are not allowed to change the
ownership of the file unless you're the superuser,
although you should be able to change the group to
any of your secondary groups. On insecure
systems, these restrictions may be relaxed, but
this is not a portable assumption.
chr NUMBER
chr Returns the character represented by that NUMBER
in the character set. For example, chr(65) is "A"
in ASCII. For the reverse, use the ord entry
29/Apr/1999 perl 5.005, patch 03 12
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
elsewhere in this document.
If NUMBER is omitted, uses $_.
chroot FILENAME
chroot This function works like the system call by the
same name: it makes the named directory the new
root directory for all further pathnames that
begin with a "/" by your process and all its
children. (It doesn't change your current working
directory, which is unaffected.) For security
reasons, this call is restricted to the superuser.
If FILENAME is omitted, does a chroot() to $_.
close FILEHANDLE
close Closes the file or pipe associated with the file
handle, returning TRUE only if stdio successfully
flushes buffers and closes the system file
descriptor. Closes the currently selected
filehandle if the argument is omitted.
You don't have to close FILEHANDLE if you are
immediately going to do another open() on it,
because open() will close it for you. (See
open().) However, an explicit close() on an input
file resets the line counter ($.), while the
implicit close done by open() does not.
If the file handle came from a piped open close()
will additionally return FALSE if one of the other
system calls involved fails or if the program
exits with non-zero status. (If the only problem
was that the program exited non-zero $! will be
set to 0.) Closing a pipe also waits for the
process executing on the pipe to complete, in case
you want to look at the output of the pipe
afterwards, and implicitly puts the exit status
value of that command into $?.
Example:
open(OUTPUT, '|sort >foo') # pipe to sort
or die "Can't start sort: $!";
#... # print stuff to output
close OUTPUT # wait for sort to finish
or warn $! ? "Error closing sort pipe: $!"
: "Exit status $? from sort";
open(INPUT, 'foo') # get sort's results
or die "Can't open 'foo' for input: $!";
FILEHANDLE may be an expression whose value can be
used as an indirect filehandle, usually the real
29/Apr/1999 perl 5.005, patch 03 13
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
filehandle name.
closedir DIRHANDLE
Closes a directory opened by opendir() and returns
the success of that system call.
DIRHANDLE may be an expression whose value can be
used as an indirect dirhandle, usually the real
dirhandle name.
connect SOCKET,NAME
Attempts to connect to a remote socket, just as
the connect system call does. Returns TRUE if it
succeeded, FALSE otherwise. NAME should be a
packed address of the appropriate type for the
socket. See the examples in the section on
Sockets: Client/Server Communication in the
perlipc manpage.
continue BLOCK
Actually a flow control statement rather than a
function. If there is a continue BLOCK attached
to a BLOCK (typically in a while or foreach), it
is always executed just before the conditional is
about to be evaluated again, just like the third
part of a for loop in C. Thus it can be used to
increment a loop variable, even when the loop has
been continued via the next statement (which is
similar to the C continue statement).
last, next, or redo may appear within a continue
block. last and redo will behave as if they had
been executed within the main block. So will next,
but since it will execute a continue block, it may
be more entertaining.
while (EXPR) {
### redo always comes here
do_something;
} continue {
### next always comes here
do_something_else;
# then back the top to re-check EXPR
}
### last always comes here
Omitting the continue section is semantically
equivalent to using an empty one, logically
enough. In that case, next goes directly back to
check the condition at the top of the loop.
cos EXPR
Returns the cosine of EXPR (expressed in radians).
If EXPR is omitted, takes cosine of $_.
29/Apr/1999 perl 5.005, patch 03 14
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
For the inverse cosine operation, you may use the
POSIX::acos() function, or use this relation:
sub acos { atan2( sqrt(1 - $_[0] * $_[0]), $_[0] ) }
crypt PLAINTEXT,SALT
Encrypts a string exactly like the crypt(3)
function in the C library (assuming that you
actually have a version there that has not been
extirpated as a potential munition). This can
prove useful for checking the password file for
lousy passwords, amongst other things. Only the
guys wearing white hats should do this.
Note that crypt() is intended to be a one-way
function, much like breaking eggs to make an
omelette. There is no (known) corresponding
decrypt function. As a result, this function
isn't all that useful for cryptography. (For
that, see your nearby CPAN mirror.)
When verifying an existing encrypted string you
should use the encrypted text as the salt (like
crypt($plain, $crypted) eq $crypted). This allows
your code to work with the standard crypt() and
with more exotic implementations. When choosing a
new salt create a random two character string
whose characters come from the set [./0-9A-Za-z]
(like join '', ('.', '/', 0..9, 'A'..'Z',
'a'..'z')[rand 64, rand 64]).
Here's an example that makes sure that whoever
runs this program knows their own password:
$pwd = (getpwuid($<))[1];
system "stty -echo";
print "Password: ";
chomp($word = <STDIN>);
print "\n";
system "stty echo";
if (crypt($word, $pwd) ne $pwd) {
die "Sorry...\n";
} else {
print "ok\n";
}
Of course, typing in your own password to whoever
asks you for it is unwise.
dbmclose HASH
[This function has been largely superseded by the
29/Apr/1999 perl 5.005, patch 03 15
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
untie() function.]
Breaks the binding between a DBM file and a hash.
dbmopen HASH,DBNAME,MODE
[This function has been largely superseded by the
tie() function.]
This binds a dbm(3), ndbm(3), sdbm(3), gdbm(3), or
Berkeley DB file to a hash. HASH is the name of
the hash. (Unlike normal open(), the first
argument is NOT a filehandle, even though it looks
like one). DBNAME is the name of the database
(without the .dir or .pag extension if any). If
the database does not exist, it is created with
protection specified by MODE (as modified by the
umask()). If your system supports only the older
DBM functions, you may perform only one dbmopen()
in your program. In older versions of Perl, if
your system had neither DBM nor ndbm, calling
dbmopen() produced a fatal error; it now falls
back to sdbm(3).
If you don't have write access to the DBM file,
you can only read hash variables, not set them.
If you want to test whether you can write, either
use file tests or try setting a dummy hash entry
inside an eval(), which will trap the error.
Note that functions such as keys() and values()
may return huge lists when used on large DBM
files. You may prefer to use the each() function
to iterate over large DBM files. Example:
# print out history file offsets
dbmopen(%HIST,'/usr/lib/news/history',0666);
while (($key,$val) = each %HIST) {
print $key, ' = ', unpack('L',$val), "\n";
}
dbmclose(%HIST);
See also the AnyDBM_File manpage for a more
general description of the pros and cons of the
various dbm approaches, as well as the DB_File
manpage for a particularly rich implementation.
You can control which DBM library you use by
loading that library before you call dbmopen():
use DB_File;
dbmopen(%NS_Hist, "$ENV{HOME}/.netscape/history.db")
or die "Can't open netscape history file: $!";
29/Apr/1999 perl 5.005, patch 03 16
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
defined EXPR
defined Returns a Boolean value telling whether EXPR has a
value other than the undefined value undef. If
EXPR is not present, $_ will be checked.
Many operations return undef to indicate failure,
end of file, system error, uninitialized variable,
and other exceptional conditions. This function
allows you to distinguish undef from other values.
(A simple Boolean test will not distinguish among
undef, zero, the empty string, and "0", which are
all equally false.) Note that since undef is a
valid scalar, its presence doesn't necessarily
indicate an exceptional condition: pop() returns
undef when its argument is an empty array, or when
the element to return happens to be undef.
You may also use defined() to check whether a
subroutine exists, by saying defined &func without
parentheses. On the other hand, use of defined()
upon aggregates (hashes and arrays) is not
guaranteed to produce intuitive results, and
should probably be avoided.
When used on a hash element, it tells you whether
the value is defined, not whether the key exists
in the hash. Use the exists entry elsewhere in
this documentfor the latter purpose.
Examples:
print if defined $switch{'D'};
print "$val\n" while defined($val = pop(@ary));
die "Can't readlink $sym: $!"
unless defined($value = readlink $sym);
sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
$debugging = 0 unless defined $debugging;
Note: Many folks tend to overuse defined(), and
then are surprised to discover that the number 0
and "" (the zero-length string) are, in fact,
defined values. For example, if you say
"ab" =~ /a(.*)b/;
The pattern match succeeds, and $1 is defined,
despite the fact that it matched "nothing". But
it didn't really match nothing--rather, it matched
something that happened to be zero characters
long. This is all very above-board and honest.
When a function returns an undefined value, it's
an admission that it couldn't give you an honest
answer. So you should use defined() only when
29/Apr/1999 perl 5.005, patch 03 17
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
you're questioning the integrity of what you're
trying to do. At other times, a simple comparison
to 0 or "" is what you want.
Currently, using defined() on an entire array or
hash reports whether memory for that aggregate has
ever been allocated. So an array you set to the
empty list appears undefined initially, and one
that once was full and that you then set to the
empty list still appears defined. You should
instead use a simple test for size:
if (@an_array) { print "has array elements\n" }
if (%a_hash) { print "has hash members\n" }
Using undef() on these, however, does clear their
memory and then report them as not defined
anymore, but you shouldn't do that unless you
don't plan to use them again, because it saves
time when you load them up again to have memory
already ready to be filled. The normal way to
free up space used by an aggregate is to assign
the empty list.
This counterintuitive behavior of defined() on
aggregates may be changed, fixed, or broken in a
future release of Perl.
See also the undef, exists, and ref entries
elsewhere in this document.
delete EXPR
Deletes the specified key(s) and their associated
values from a hash. For each key, returns the
deleted value associated with that key, or the
undefined value if there was no such key.
Deleting from $ENV{} modifies the environment.
Deleting from a hash tied to a DBM file deletes
the entry from the DBM file. (But deleting from a
tie()d hash doesn't necessarily return anything.)
The following deletes all the values of a hash:
foreach $key (keys %HASH) {
delete $HASH{$key};
}
And so does this:
delete @HASH{keys %HASH}
But both of these are slower than just assigning
the empty list or undefining it:
29/Apr/1999 perl 5.005, patch 03 18
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
%hash = (); # completely empty %hash
undef %hash; # forget %hash every existed
Note that the EXPR can be arbitrarily complicated
as long as the final operation is a hash element
lookup or hash slice:
delete $ref->[$x][$y]{$key};
delete @{$ref->[$x][$y]}{$key1, $key2, @morekeys};
die LIST
Outside an eval(), prints the value of LIST to
STDERR and exits with the current value of $!
(errno). If $! is 0, exits with the value of ($?
>> 8) (backtick `command` status). If ($? >> 8)
is 0, exits with 255. Inside an eval(), the error
message is stuffed into $@ and the eval() is
terminated with the undefined value. This makes
die() the way to raise an exception.
Equivalent examples:
die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' or die "Can't cd to spool: $!\n"
If the value of EXPR does not end in a newline,
the current script line number and input line
number (if any) are also printed, and a newline is
supplied. Note that the "input line number" (also
known as "chunk") is subject to whatever notion of
"line" happens to be currently in effect, and is
also available as the special variable $.. See
the section on $/ in the perlvar manpage and the
section on $. in the perlvar manpage.
Hint: sometimes appending ", stopped" to your
message will cause it to make better sense when
the string "at foo line 123" is appended. Suppose
you are running script "canasta".
die "/etc/games is no good";
die "/etc/games is no good, stopped";
produce, respectively
/etc/games is no good at canasta line 123.
/etc/games is no good, stopped at canasta line 123.
See also exit(), warn(), and the Carp module.
If LIST is empty and $@ already contains a value
(typically from a previous eval) that value is
reused after appending "\t...propagated". This is
29/Apr/1999 perl 5.005, patch 03 19
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
useful for propagating exceptions:
eval { ... };
die unless $@ =~ /Expected exception/;
If $@ is empty then the string "Died" is used.
die() can also be called with a reference
argument. If this happens to be trapped within an
eval(), $@ contains the reference. This behavior
permits a more elaborate exception handling
implementation using objects that maintain
arbitary state about the nature of the exception.
Such a scheme is sometimes preferable to matching
particular string values of $@ using regular
expressions. Here's an example:
eval { ... ; die Some::Module::Exception->new( FOO => "bar" ) };
if ($@) {
if (ref($@) && UNIVERSAL::isa($@,"Some::Module::Exception")) {
# handle Some::Module::Exception
}
else {
# handle all other possible exceptions
}
}
Since perl will stringify uncaught exception
messages before displaying them, you may want to
overload stringification operations on such custom
exception objects. See the overload manpage for
details about that.
You can arrange for a callback to be run just
before the die() does its deed, by setting the
$SIG{__DIE__} hook. The associated handler will
be called with the error text and can change the
error message, if it sees fit, by calling die()
again. See the section on $SIG{expr} in the
perlvar manpage for details on setting %SIG
entries, and the section on eval BLOCK for some
examples.
Note that the $SIG{__DIE__} hook is currently
called even inside eval()ed blocks/strings! If
one wants the hook to do nothing in such
situations, put
die @_ if $^S;
as the first line of the handler (see the section
on $^S in the perlvar manpage). Because this
promotes action at a distance, this
counterintuitive behavior may be fixed in a future
29/Apr/1999 perl 5.005, patch 03 20
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
release.
do BLOCK
Not really a function. Returns the value of the
last command in the sequence of commands indicated
by BLOCK. When modified by a loop modifier,
executes the BLOCK once before testing the loop
condition. (On other statements the loop
modifiers test the conditional first.)
do BLOCK does not count as a loop, so the loop
control statements next, last, or redo cannot be
used to leave or restart the block. See the
perlsyn manpage for alternative strategies.
do SUBROUTINE(LIST)
A deprecated form of subroutine call. See the
perlsub manpage.
do EXPR Uses the value of EXPR as a filename and executes
the contents of the file as a Perl script. Its
primary use is to include subroutines from a Perl
subroutine library.
do 'stat.pl';
is just like
scalar eval `cat stat.pl`;
except that it's more efficient and concise, keeps
track of the current filename for error messages,
searches the @INC libraries, and updates %INC if
the file is found. See the section on Predefined
Names in the perlvar manpage for these variables.
It also differs in that code evaluated with do
FILENAME cannot see lexicals in the enclosing
scope; eval STRING does. It's the same, however,
in that it does reparse the file every time you
call it, so you probably don't want to do this
inside a loop.
If do cannot read the file, it returns undef and
sets $! to the error. If do can read the file but
cannot compile it, it returns undef and sets an
error message in $@. If the file is successfully
compiled, do returns the value of the last
expression evaluated.
Note that inclusion of library modules is better
done with the use() and require() operators, which
also do automatic error checking and raise an
exception if there's a problem.
29/Apr/1999 perl 5.005, patch 03 21
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
You might like to use do to read in a program
configuration file. Manual error checking can be
done this way:
# read in config files: system first, then user
for $file ("/share/prog/defaults.rc",
"$ENV{HOME}/.someprogrc")
{
unless ($return = do $file) {
warn "couldn't parse $file: $@" if $@;
warn "couldn't do $file: $!" unless defined $return;
warn "couldn't run $file" unless $return;
}
}
dump LABEL
dump This causes an immediate core dump. Primarily
this is so that you can use the undump 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 -u option in the perlrun manpage.
Example:
#!/usr/bin/perl
require 'getopt.pl';
require 'stat.pl';
%days = (
'Sun' => 1,
'Mon' => 2,
'Tue' => 3,
'Wed' => 4,
'Thu' => 5,
'Fri' => 6,
'Sat' => 7,
);
dump QUICKSTART if $ARGV[0] eq '-d';
QUICKSTART:
Getopt('f');
This operator is largely obsolete, partly because
29/Apr/1999 perl 5.005, patch 03 22
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
it's very hard to convert a core file into an
executable, and because the real perl-to-C
compiler has superseded it.
each HASH
When called in list context, returns a 2-element
list consisting of the key and value for the next
element of a hash, so that you can iterate over
it. When called in scalar context, returns the
key for only the "next" element in the hash.
(Note: Keys may be "0" or "", which are logically
false; you may wish to avoid constructs like while
($k = each %foo) {} for this reason.)
Entries are returned in an apparently random
order. The actual random order is subject to
change in future versions of perl, but it is
guaranteed to be in the same order as either the
keys() or values() function would produce on the
same (unmodified) hash.
When the hash is entirely read, a null array is
returned in list context (which when assigned
produces a FALSE (0) value), and undef in scalar
context. The next call to each() after that will
start iterating again. There is a single iterator
for each hash, shared by all each(), keys(), and
values() function calls in the program; it can be
reset by reading all the elements from the hash,
or by evaluating keys HASH or values HASH. If you
add or delete elements of a hash while you're
iterating over it, you may get entries skipped or
duplicated, so don't.
The following prints out your environment like the
printenv(1) program, only in a different order:
while (($key,$value) = each %ENV) {
print "$key=$value\n";
}
See also keys(), values() and sort().
eof FILEHANDLE
eof ()
eof Returns 1 if the next read on FILEHANDLE will
return end of file, or if FILEHANDLE is not open.
FILEHANDLE may be an expression whose value gives
the real filehandle. (Note that this function
actually reads a character and then ungetc()s it,
so isn't very useful in an interactive context.)
Do not read from a terminal file (or call
29/Apr/1999 perl 5.005, patch 03 23
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
eof(FILEHANDLE) on it) after end-of-file is
reached. Filetypes such as terminals may lose the
end-of-file condition if you do.
An eof without an argument uses the last file read
as argument. Using eof() with empty parentheses
is very different. It indicates the pseudo file
formed of the files listed on the command line,
i.e., eof() is reasonable to use inside a while
(<>) loop to detect the end of only the last file.
Use eof(ARGV) or eof without the parentheses to
test EACH file in a while (<>) loop. Examples:
# reset line numbering on each input file
while (<>) {
next if /^\s*#/; # skip comments
print "$.\t$_";
} continue {
close ARGV if eof; # Not eof()!
}
# insert dashes just before last line of last file
while (<>) {
if (eof()) { # check for end of current file
print "--------------\n";
close(ARGV); # close or last; is needed if we
# are reading from the terminal
}
print;
}
Practical hint: you almost never need to use eof
in Perl, because the input operators return false
values when they run out of data, or if there was
an error.
eval EXPR
eval BLOCK
In the first form, the return value of EXPR is
parsed and executed as if it were a little Perl
program. The value of the expression (which is
itself determined within scalar context) is first
parsed, and if there weren't any errors, executed
in the context of the current Perl program, so
that any variable settings or subroutine and
format definitions remain afterwards. Note that
the value is parsed every time the eval executes.
If EXPR is omitted, evaluates $_. This form is
typically used to delay parsing and subsequent
execution of the text of EXPR until run time.
In the second form, the code within the BLOCK is
parsed only once--at the same time the code
29/Apr/1999 perl 5.005, patch 03 24
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
surrounding the eval itself was parsed--and
executed within the context of the current Perl
program. This form is typically used to trap
exceptions more efficiently than the first (see
below), while also providing the benefit of
checking the code within BLOCK at compile time.
The final semicolon, if any, may be omitted from
the value of EXPR or within the BLOCK.
In both forms, the value returned is the value of
the last expression evaluated inside the mini-
program; a return statement may be also used, just
as with subroutines. The expression providing the
return value is evaluated in void, scalar, or list
context, depending on the context of the eval
itself. See the wantarray entry elsewhere in this
documentfor more on how the evaluation context can
be determined.
If there is a syntax error or runtime error, or a
die() statement is executed, an undefined value is
returned by eval(), and $@ is set to the error
message. If there was no error, $@ is guaranteed
to be a null string. Beware that using eval()
neither silences perl from printing warnings to
STDERR, nor does it stuff the text of warning
messages into $@. To do either of those, you have
to use the $SIG{__WARN__} facility. See the warn
entry elsewhere in this document and the perlvar
manpage.
Note that, because eval() traps otherwise-fatal
errors, it is useful for determining whether a
particular feature (such as socket() or symlink())
is implemented. It is also Perl's exception
trapping mechanism, where the die operator is used
to raise exceptions.
If the code to be executed doesn't vary, you may
use the eval-BLOCK form to trap run-time errors
without incurring the penalty of recompiling each
time. The error, if any, is still returned in $@.
Examples:
# make divide-by-zero nonfatal
eval { $answer = $a / $b; }; warn $@ if $@;
# same thing, but less efficient
eval '$answer = $a / $b'; warn $@ if $@;
# a compile-time error
eval { $answer = }; # WRONG
29/Apr/1999 perl 5.005, patch 03 25
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
# a run-time error
eval '$answer ='; # sets $@
Due to the current arguably broken state of
__DIE__ hooks, when using the eval{} form as an
exception trap in libraries, you may wish not to
trigger any __DIE__ hooks that user code may have
installed. You can use the local $SIG{__DIE__}
construct for this purpose, as shown in this
example:
# a very private exception trap for divide-by-zero
eval { local $SIG{'__DIE__'}; $answer = $a / $b; };
warn $@ if $@;
This is especially significant, given that __DIE__
hooks can call die() again, which has the effect
of changing their error messages:
# __DIE__ hooks may modify error messages
{
local $SIG{'__DIE__'} =
sub { (my $x = $_[0]) =~ s/foo/bar/g; die $x };
eval { die "foo lives here" };
print $@ if $@; # prints "bar lives here"
}
Because this promotes action at a distance, this
counterintuive behavior may be fixed in a future
release.
With an eval(), you should be especially careful
to remember what's being looked at when:
eval $x; # CASE 1
eval "$x"; # CASE 2
eval '$x'; # CASE 3
eval { $x }; # CASE 4
eval "\$$x++"; # CASE 5
$$x++; # CASE 6
Cases 1 and 2 above behave identically: they run
the code contained in the variable $x. (Although
case 2 has misleading double quotes making the
reader wonder what else might be happening
(nothing is).) Cases 3 and 4 likewise behave in
the same way: they run the code '$x', which does
nothing but return the value of $x. (Case 4 is
preferred for purely visual reasons, but it also
has the advantage of compiling at compile-time
instead of at run-time.) Case 5 is a place where
normally you WOULD like to use double quotes,
29/Apr/1999 perl 5.005, patch 03 26
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
except that in this particular situation, you can
just use symbolic references instead, as in case
6.
eval BLOCK does not count as a loop, so the loop
control statements next, last, or redo cannot be
used to leave or restart the block.
exec LIST
exec PROGRAM LIST
The exec() function executes a system command AND
NEVER RETURNS - use system() instead of exec() if
you want it to return. It fails and returns FALSE
only if the command does not exist and it is
executed directly instead of via your system's
command shell (see below).
Since it's a common mistake to use exec() instead
of system(), Perl warns you if there is a
following statement which isn't die(), warn(), or
exit() (if -w is set - but you always do that).
If you really want to follow an exec() with some
other statement, you can use one of these styles
to avoid the warning:
exec ('foo') or print STDERR "couldn't exec foo: $!";
{ exec ('foo') }; print STDERR "couldn't exec foo: $!";
If there is more than one argument in LIST, or if
LIST is an array with more than one value, calls
execvp(3) with the arguments in LIST. If there is
only one scalar argument or an array with one
element in it, the argument is checked for shell
metacharacters, and if there are any, the entire
argument is passed to the system's command shell
for parsing (this is /bin/sh -c on Unix platforms,
but varies on other platforms). If there are no
shell metacharacters in the argument, it is split
into words and passed directly to execvp(), which
is more efficient. Note: exec() and system() do
not flush your output buffer, so you may need to
set $| to avoid lost output. Examples:
exec '/bin/echo', 'Your arguments are: ', @ARGV;
exec "sort $outfile | uniq";
If you don't really want to execute the first
argument, but want to lie to the program you are
executing about its own name, you can specify the
program you actually want to run as an "indirect
object" (without a comma) in front of the LIST.
(This always forces interpretation of the LIST as
a multivalued list, even if there is only a single
29/Apr/1999 perl 5.005, patch 03 27
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
scalar in the list.) Example:
$shell = '/bin/csh';
exec $shell '-sh'; # pretend it's a login shell
or, more directly,
exec {'/bin/csh'} '-sh'; # pretend it's a login shell
When the arguments get executed via the system
shell, results will be subject to its quirks and
capabilities. See the section on `STRING` in the
perlop manpage for details.
Using an indirect object with exec() or system()
is also more secure. This usage forces
interpretation of the arguments as a multivalued
list, even if the list had just one argument.
That way you're safe from the shell expanding
wildcards or splitting up words with whitespace in
them.
@args = ( "echo surprise" );
exec @args; # subject to shell escapes
# if @args == 1
exec { $args[0] } @args; # safe even with one-arg list
The first version, the one without the indirect
object, ran the echo program, passing it
"surprise" an argument. The second version
didn't--it tried to run a program literally called
"echo surprise", didn't find it, and set $? to a
non-zero value indicating failure.
Note that exec() will not call your END blocks,
nor will it call any DESTROY methods in your
objects.
exists EXPR
Returns TRUE if the specified hash key exists in
its hash array, even if the corresponding value is
undefined.
print "Exists\n" if exists $array{$key};
print "Defined\n" if defined $array{$key};
print "True\n" if $array{$key};
A hash element can be TRUE only if it's defined,
and defined if it exists, but the reverse doesn't
necessarily hold true.
Note that the EXPR can be arbitrarily complicated
as long as the final operation is a hash key
29/Apr/1999 perl 5.005, patch 03 28
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
lookup:
if (exists $ref->{A}->{B}->{$key}) { }
if (exists $hash{A}{B}{$key}) { }
Although the last element will not spring into
existence just because its existence was tested,
intervening ones will. Thus $ref->{"A"} and
$ref->{"A"}->{"B"} will spring into existence due
to the existence test for a $key element. This
happens anywhere the arrow operator is used,
including even
undef $ref;
if (exists $ref->{"Some key"}) { }
print $ref; # prints HASH(0x80d3d5c)
This surprising autovivification in what does not
at first--or even second--glance appear to be an
lvalue context may be fixed in a future release.
exit EXPR
Evaluates EXPR and exits immediately with that
value. Example:
$ans = <STDIN>;
exit 0 if $ans =~ /^[Xx]/;
See also die(). If EXPR is omitted, exits with 0
status. The only universally recognized values
for EXPR are 0 for success and 1 for error; other
values are subject to interpretation depending on
the environment in which the Perl program is
running. For example, exiting 69 (EX_UNAVAILABLE)
from a sendmail incoming-mail filter will cause
the mailer to return the item undelivered, but
that's not true everywhere.
Don't use exit() to abort a subroutine if there's
any chance that someone might want to trap
whatever error happened. Use die() instead, which
can be trapped by an eval().
The exit() function does not always exit
immediately. It calls any defined END routines
first, but these END routines may not themselves
abort the exit. Likewise any object destructors
that need to be called are called before the real
exit. If this is a problem, you can call
POSIX:_exit($status) to avoid END and destructor
processing. See the perlsub manpage for details.
exp EXPR
29/Apr/1999 perl 5.005, patch 03 29
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
exp Returns e (the natural logarithm base) to the
power of EXPR. If EXPR is omitted, gives exp($_).
fcntl FILEHANDLE,FUNCTION,SCALAR
Implements the fcntl(2) function. You'll probably
have to say
use Fcntl;
first to get the correct constant definitions.
Argument processing and value return works just
like ioctl() below. For example:
use Fcntl;
fcntl($filehandle, F_GETFL, $packed_return_buffer)
or die "can't fcntl F_GETFL: $!";
You don't have to check for defined() on the
return from fnctl(). Like ioctl(), it maps a 0
return from the system call into "0 but true" in
Perl. This string is true in boolean context and
0 in numeric context. It is also exempt from the
normal -w warnings on improper numeric
conversions.
Note that fcntl() will produce a fatal error if
used on a machine that doesn't implement fcntl(2).
See the Fcntl module or your fcntl(2) manpage to
learn what functions are available on your system.
fileno FILEHANDLE
Returns the file descriptor for a filehandle, or
undefined if the filehandle is not open. This is
mainly useful for constructing bitmaps for
select() and low-level POSIX tty-handling
operations. If FILEHANDLE is an expression, the
value is taken as an indirect filehandle,
generally its name.
You can use this to find out whether two handles
refer to the same underlying descriptor:
if (fileno(THIS) == fileno(THAT)) {
print "THIS and THAT are dups\n";
}
flock FILEHANDLE,OPERATION
Calls flock(2), or an emulation of it, on
FILEHANDLE. Returns TRUE for success, FALSE on
failure. Produces a fatal error if used on a
machine that doesn't implement flock(2), fcntl(2)
locking, or lockf(3). flock() is Perl's portable
file locking interface, although it locks only
29/Apr/1999 perl 5.005, patch 03 30
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
entire files, not records.
Two potentially non-obvious but traditional flock
semantics are that it waits indefinitely until the
lock is granted, and that its locks merely
advisory. Such discretionary locks are more
flexible, but offer fewer guarantees. This means
that files locked with flock() may be modified by
programs that do not also use flock(). See the
perlport manpage, your port's specific
documentation, or your system-specific local
manpages for details. It's best to assume
traditional behavior if you're writing portable
programs. (But if you're not, you should as
always feel perfectly free to write for your own
system's idiosyncrasies (sometimes called
"features"). Slavish adherence to portability
concerns shouldn't get in the way of your getting
your job done.)
OPERATION is one of LOCK_SH, LOCK_EX, or LOCK_UN,
possibly combined with LOCK_NB. These constants
are traditionally valued 1, 2, 8 and 4, but you
can use the symbolic names if import them from the
Fcntl module, either individually, or as a group
using the ':flock' tag. LOCK_SH requests a shared
lock, LOCK_EX requests an exclusive lock, and
LOCK_UN releases a previously requested lock. If
LOCK_NB is added to LOCK_SH or LOCK_EX then
flock() will return immediately rather than
blocking waiting for the lock (check the return
status to see if you got it).
To avoid the possibility of miscoordination, Perl
now flushes FILEHANDLE before locking or unlocking
it.
Note that the emulation built with lockf(3)
doesn't provide shared locks, and it requires that
FILEHANDLE be open with write intent. These are
the semantics that lockf(3) implements. Most if
not all systems implement lockf(3) in terms of
fcntl(2) locking, though, so the differing
semantics shouldn't bite too many people.
Note also that some versions of flock() cannot
lock things over the network; you would need to
use the more system-specific fcntl() for that. If
you like you can force Perl to ignore your
system's flock(2) function, and so provide its own
fcntl(2)-based emulation, by passing the switch
-Ud_flock to the Configure program when you
configure perl.
29/Apr/1999 perl 5.005, patch 03 31
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
Here's a mailbox appender for BSD systems.
use Fcntl ':flock'; # import LOCK_* constants
sub lock {
flock(MBOX,LOCK_EX);
# and, in case someone appended
# while we were waiting...
seek(MBOX, 0, 2);
}
sub unlock {
flock(MBOX,LOCK_UN);
}
open(MBOX, ">>/usr/spool/mail/$ENV{'USER'}")
or die "Can't open mailbox: $!";
lock();
print MBOX $msg,"\n\n";
unlock();
On systems that support a real flock(), locks are
inherited across fork() calls, whereas those that
must resort to the more capricious fcntl()
function lose the locks, making it harder to write
servers.
See also the DB_File manpage for other flock()
examples.
fork Does a fork(2) system call to create a new process
running the same program at the same point. It
returns the child pid to the parent process, 0 to
the child process, or undef if the fork is
unsuccessful. File descriptors (and sometimes
locks on those descriptors) are shared, while
everything else is copied. On most systems
supporting fork(), great care has gone into making
it extremely efficient (for example, using copy-
on-write technology on data pages), making it the
dominant paradigm for multitasking over the last
few decades.
Note: unflushed buffers remain unflushed in both
processes, which means you may need to set $|
($AUTOFLUSH in English) or call the autoflush()
method of IO::Handle to avoid duplicate output.
If you fork() without ever waiting on your
children, you will accumulate zombies. On some
systems, you can avoid this by setting $SIG{CHLD}
to "IGNORE". See also the perlipc manpage for
more examples of forking and reaping moribund
29/Apr/1999 perl 5.005, patch 03 32
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
children.
Note that if your forked child inherits system
file descriptors like STDIN and STDOUT that are
actually connected by a pipe or socket, even if
you exit, then the remote server (such as, say, a
CGI script or a backgrounded job launced from a
remote shell) won't think you're done. You should
reopen those to /dev/null if it's any issue.
format Declare a picture format for use by the write()
function. For example:
format Something =
Test: @<<<<<<<< @||||| @>>>>>
$str, $%, '$' . int($num)
.
$str = "widget";
$num = $cost/$quantity;
$~ = 'Something';
write;
See the perlform manpage for many details and
examples.
formline PICTURE,LIST
This is an internal function used by formats,
though you may call it, too. It formats (see the
perlform manpage) a list of values according to
the contents of PICTURE, placing the output into
the format output accumulator, $^A (or
$ACCUMULATOR in English). Eventually, when a
write() is done, the contents of $^A are written
to some filehandle, but you could also read $^A
yourself and then set $^A back to "". Note that a
format typically does one formline() per line of
form, but the formline() function itself doesn't
care how many newlines are embedded in the
PICTURE. This means that the ~ and ~~ tokens will
treat the entire PICTURE as a single line. You
may therefore need to use multiple formlines to
implement a single record format, just like the
format compiler.
Be careful if you put double quotes around the
picture, because an "@" character may be taken to
mean the beginning of an array name. formline()
always returns TRUE. See the perlform manpage for
other examples.
getc FILEHANDLE
29/Apr/1999 perl 5.005, patch 03 33
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
getc Returns the next character from the input file
attached to FILEHANDLE, or the undefined value at
end of file, or if there was an error. If
FILEHANDLE is omitted, reads from STDIN. This is
not particularly efficient. However, it cannot be
used by itself to fetch single characters without
waiting for the user to hit enter. For that, try
something more like:
if ($BSD_STYLE) {
system "stty cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", '-icanon', 'eol', "\001";
}
$key = getc(STDIN);
if ($BSD_STYLE) {
system "stty -cbreak </dev/tty >/dev/tty 2>&1";
}
else {
system "stty", 'icanon', 'eol', '^@'; # ASCII null
}
print "\n";
Determination of whether $BSD_STYLE should be set
is left as an exercise to the reader.
The POSIX::getattr() function can do this more
portably on systems purporting POSIX compliance.
See also the Term::ReadKey module from your
nearest CPAN site; details on CPAN can be found on
the CPAN entry in the perlmodlib manpage.
getlogin
Implements the C library function of the same
name, which on most systems returns the current
login from /etc/utmp, if any. If null, use
getpwuid().
$login = getlogin || getpwuid($<) || "Kilroy";
Do not consider getlogin() for authentication: it
is not as secure as getpwuid().
getpeername SOCKET
Returns the packed sockaddr address of other end
of the SOCKET connection.
29/Apr/1999 perl 5.005, patch 03 34
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
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
29/Apr/1999 perl 5.005, patch 03 35
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
gethostent
getnetent
getprotoent
getservent
setpwent
setgrent
sethostent STAYOPEN
setnetent STAYOPEN
setprotoent STAYOPEN
setservent STAYOPEN
endpwent
endgrent
endhostent
endnetent
endprotoent
endservent
These routines perform the same functions as their
counterparts in the system library. In list
context, the return values from the various get
routines are as follows:
($name,$passwd,$uid,$gid,
$quota,$comment,$gcos,$dir,$shell,$expire) = getpw*
($name,$passwd,$gid,$members) = getgr*
($name,$aliases,$addrtype,$length,@addrs) = gethost*
($name,$aliases,$addrtype,$net) = getnet*
($name,$aliases,$proto) = getproto*
($name,$aliases,$port,$proto) = getserv*
(If the entry doesn't exist you get a null list.)
In scalar context, you get the name, unless the
function was a lookup by name, in which case you
get the other thing, whatever it is. (If the
entry doesn't exist you get the undefined value.)
For example:
29/Apr/1999 perl 5.005, patch 03 36
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
$uid = getpwnam($name);
$name = getpwuid($num);
$name = getpwent();
$gid = getgrnam($name);
$name = getgrgid($num;
$name = getgrent();
#etc.
In getpw*() the fields $quota, $comment, and
$expire are special cases in the sense that in
many systems they are unsupported. If the $quota
is unsupported, it is an empty scalar. If it is
supported, it usually encodes the disk quota. If
the $comment field is unsupported, it is an empty
scalar. If it is supported it usually encodes
some administrative comment about the user. In
some systems the $quota field may be $change or
$age, fields that have to do with password aging.
In some systems the $comment field may be $class.
The $expire field, if present, encodes the
expiration period of the account or the password.
For the availability and the exact meaning of
these fields in your system, please consult your
getpwnam(3) documentation and your pwd.h file.
You can also find out from within Perl what your
$quota and $comment fields mean and whether you
have the $expire field by using the Config module
and the values d_pwquota, d_pwage, d_pwchange,
d_pwcomment, and d_pwexpire. Shadow password
files are only supported if your vendor has
implemented them in the intuitive fashion that
calling the regular C library routines gets the
shadow versions if you're running under privilege.
Those that incorrectly implement a separate
library call are not supported.
The $members value returned by getgr*() is a space
separated list of the login names of the members
of the group.
For the gethost*() functions, if the h_errno
variable is supported in C, it will be returned to
you via $? if the function call fails. The @addrs
value returned by a successful call is a list of
the raw addresses returned by the corresponding
system library call. In the Internet domain, each
address is four bytes long and you can unpack it
by saying something like:
($a,$b,$c,$d) = unpack('C4',$addr[0]);
The Socket library makes this slightly easier:
29/Apr/1999 perl 5.005, patch 03 37
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
use Socket;
$iaddr = inet_aton("127.1"); # or whatever address
$name = gethostbyaddr($iaddr, AF_INET);
# or going the other way
$straddr = inet_ntoa($iaddr");
If you get tired of remembering which element of
the return list contains which return value, by-
name interfaces are also provided in modules:
File::stat, Net::hostent, Net::netent,
Net::protoent, Net::servent, Time::gmtime,
Time::localtime, and User::grent. These override
the normal built-in, replacing them with versions
that return objects with the appropriate names for
each field. For example:
use File::stat;
use User::pwent;
$is_his = (stat($filename)->uid == pwent($whoever)->uid);
Even though it looks like they're the same method
calls (uid), they aren't, because a File::stat
object is different from a User::pwent object.
getsockname SOCKET
Returns the packed sockaddr address of this end of
the SOCKET connection.
use Socket;
$mysockaddr = getsockname(SOCK);
($port, $myaddr) = unpack_sockaddr_in($mysockaddr);
getsockopt SOCKET,LEVEL,OPTNAME
Returns the socket option requested, or undef if
there is an error.
glob EXPR
glob Returns the value of EXPR with filename expansions
such as the standard Unix shell /bin/csh would do.
This is the internal function implementing the
<*.c> operator, but you can use it directly. If
EXPR is omitted, $_ is used. The <*.c> operator
is discussed in more detail in the section on I/O
Operators in the perlop manpage.
gmtime EXPR
Converts a time as returned by the time function
to a 9-element array with the time localized for
the standard Greenwich time zone. Typically used
as follows:
29/Apr/1999 perl 5.005, patch 03 38
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
gmtime(time);
All array elements are numeric, and come straight
out of a struct tm. In particular this means that
$mon has the range 0..11 and $wday has the range
0..6 with sunday as day 0. Also, $year is the
number of years since 1900, that is, $year is 123
in year 2023, not simply the last two digits of
the year. If you assume it is, then you create
non-Y2K-compliant programs--and you wouldn't want
to do that, would you?
If EXPR is omitted, does gmtime(time()).
In scalar context, returns the ctime(3) value:
$now_string = gmtime; # e.g., "Thu Oct 13 04:54:34 1994"
Also see the timegm() function provided by the
Time::Local module, and the strftime(3) function
available via the POSIX module.
This scalar value is not locale dependent (see the
perllocale manpage), but is instead a Perl
builtin. Also see the Time::Local module, and the
strftime(3) and mktime(3) functions available via
the POSIX module. To get somewhat similar but
locale dependent date strings, set up your locale
environment variables appropriately (please see
the perllocale manpage) and try for example:
use POSIX qw(strftime);
$now_string = strftime "%a %b %e %H:%M:%S %Y", gmtime;
Note that the %a and %b escapes, which represent
the short forms of the day of the week and the
month of the year, may not necessarily be three
characters wide in all locales.
goto LABEL
goto EXPR
goto &NAME
The goto-LABEL form finds the statement labeled
with LABEL and resumes execution there. It may
not be used to go into any construct that requires
initialization, such as a subroutine or a foreach
loop. It also can't be used to go into a
construct that is optimized away, or to get out of
a block or subroutine given to sort(). It can be
used to go almost anywhere else within the dynamic
29/Apr/1999 perl 5.005, patch 03 39
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
scope, including out of subroutines, but it's
usually better to use some other construct such as
last or die(). The author of Perl has never felt
the need to use this form of goto (in Perl, that
is--C is another matter).
The goto-EXPR form expects a label name, whose
scope will be resolved dynamically. This allows
for computed gotos per FORTRAN, but isn't
necessarily recommended if you're optimizing for
maintainability:
goto ("FOO", "BAR", "GLARCH")[$i];
The goto-&NAME form is highly magical, and
substitutes a call to the named subroutine for the
currently running subroutine. This is used by
AUTOLOAD subroutines that wish to load another
subroutine and then pretend that the other
subroutine had been called in the first place
(except that any modifications to @_ in the
current subroutine are propagated to the other
subroutine.) After the goto, not even caller()
will be able to tell that this routine was called
first.
grep BLOCK LIST
grep EXPR,LIST
This is similar in spirit to, but not the same as,
grep(1) and its relatives. In particular, it is
not limited to using regular expressions.
Evaluates the BLOCK or EXPR for each element of
LIST (locally setting $_ to each element) and
returns the list value consisting of those
elements for which the expression evaluated to
TRUE. In scalar context, returns the number of
times the expression was TRUE.
@foo = grep(!/^#/, @bar); # weed out comments
or equivalently,
@foo = grep {!/^#/} @bar; # weed out comments
Note that, because $_ is a reference into the list
value, it can be used to modify the elements of
the array. While this is useful and supported, it
can cause bizarre results if the LIST is not a
named array. Similarly, grep returns aliases into
the original list, much as a for loop's index
variable aliases the list elements. That is,
modifying an element of a list returned by grep
29/Apr/1999 perl 5.005, patch 03 40
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
(for example, in a foreach, map() or another
grep()) actually modifies the element in the
original list. This is usually something to be
avoided when writing clear code.
See also the map entry elsewhere in this
documentfor an array composed of the results of
the BLOCK or EXPR.
hex EXPR
hex Interprets EXPR as a hex string and returns the
corresponding value. (To convert strings that
might start with either 0, 0x, or 0b, see the oct
entry elsewhere in this document.) If EXPR is
omitted, uses $_.
print hex '0xAf'; # prints '175'
print hex 'aF'; # same
import There is no builtin import() function. It is just
an ordinary method (subroutine) defined (or
inherited) by modules that wish to export names to
another module. The use() function calls the
import() method for the package used. See also
the use() entry elsewhere in this documentthe
perlmod manpage, and the Exporter manpage.
index STR,SUBSTR,POSITION
index STR,SUBSTR
The index function searches for one string within
another, but without the wildcard-like behavior of
a full regular-expression pattern match. It
returns the position of the first occurrence of
SUBSTR in STR at or after POSITION. If POSITION
is omitted, starts searching from the beginning of
the string. The return value is based at 0 (or
whatever you've set the $[ variable to--but don't
do that). If the substring is not found, returns
one less than the base, ordinarily -1.
int EXPR
int Returns the integer portion of EXPR. If EXPR is
omitted, uses $_. You should not use this
function for rounding: one because it truncates
towards 0, and two because machine representations
of floating point numbers can sometimes produce
counterintuitive results. For example,
int(-6.725/0.025) produces -268 rather than the
correct -269; that's because it's really more like
-268.99999999999994315658 instead. Usually, the
29/Apr/1999 perl 5.005, patch 03 41
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
sprintf(), printf(), or the POSIX::floor and
POSIX::ceil functions will serve you better than
will int().
ioctl FILEHANDLE,FUNCTION,SCALAR
Implements the ioctl(2) function. You'll probably
first have to say
require "ioctl.ph"; # probably in /usr/local/lib/perl/ioctl.ph
to get the correct function definitions. If
ioctl.ph doesn't exist or doesn't have the correct
definitions you'll have to roll your own, based on
your C header files such as <sys/ioctl.h>. (There
is a Perl script called h2ph that comes with the
Perl kit that may help you in this, but it's
nontrivial.) SCALAR will be read and/or written
depending on the FUNCTION--a pointer to the string
value of SCALAR will be passed as the third
argument of the actual ioctl() call. (If SCALAR
has no string value but does have a numeric value,
that value will be passed rather than a pointer to
the string value. To guarantee this to be TRUE,
add a 0 to the scalar before using it.) The
pack() and unpack() functions are useful for
manipulating the values of structures used by
ioctl(). The following example sets the erase
character to DEL.
require 'ioctl.ph';
$getp = &TIOCGETP;
die "NO TIOCGETP" if $@ || !$getp;
$sgttyb_t = "ccccs"; # 4 chars and a short
if (ioctl(STDIN,$getp,$sgttyb)) {
@ary = unpack($sgttyb_t,$sgttyb);
$ary[2] = 127;
$sgttyb = pack($sgttyb_t,@ary);
ioctl(STDIN,&TIOCSETP,$sgttyb)
|| die "Can't ioctl: $!";
}
The return value of ioctl() (and fcntl()) is as
follows:
if OS returns: then Perl returns:
-1 undefined value
0 string "0 but true"
anything else that number
Thus Perl returns TRUE on success and FALSE on
failure, yet you can still easily determine the
actual value returned by the operating system:
29/Apr/1999 perl 5.005, patch 03 42
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
$retval = ioctl(...) || -1;
printf "System returned %d\n", $retval;
The special string "0 but true" is exempt from -w
complaints about improper numeric conversions.
join EXPR,LIST
Joins the separate strings of LIST into a single
string with fields separated by the value of EXPR,
and returns that new string. Example:
$rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);
See the split entry elsewhere in this document.
keys HASH
Returns a list consisting of all the keys of the
named hash. (In a scalar context, returns the
number of keys.) The keys are returned in an
apparently random order. The actual random order
is subject to change in future versions of perl,
but it is guaranteed to be the same order as
either the values() or each() function produces
(given that the hash has not been modified). As a
side effect, it resets HASH's iterator.
Here is yet another way to print your environment:
@keys = keys %ENV;
@values = values %ENV;
while ($#keys >= 0) {
print pop(@keys), '=', pop(@values), "\n";
}
or how about sorted by key:
foreach $key (sort(keys %ENV)) {
print $key, '=', $ENV{$key}, "\n";
}
To sort a hash by value, you'll need to use a
sort() function. Here's a descending numeric sort
of a hash by its values:
foreach $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
printf "%4d %s\n", $hash{$key}, $key;
}
As an lvalue keys() allows you to increase the
number of hash buckets allocated for the given
hash. This can gain you a measure of efficiency
if you know the hash is going to get big. (This
is similar to pre-extending an array by assigning
a larger number to $#array.) If you say
29/Apr/1999 perl 5.005, patch 03 43
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
keys %hash = 200;
then %hash will have at least 200 buckets
allocated for it--256 of them, in fact, since it
rounds up to the next power of two. These buckets
will be retained even if you do %hash = (), use
undef %hash if you want to free the storage while
%hash is still in scope. You can't shrink the
number of buckets allocated for the hash using
keys() in this way (but you needn't worry about
doing this by accident, as trying has no effect).
See also each(), values() and sort().
kill LIST
Sends a signal to a list of processes. The first
element of the list must be the signal to send.
Returns the number of processes successfully
signaled.
$cnt = kill 1, $child1, $child2;
kill 9, @goners;
Unlike in the shell, in Perl if the SIGNAL is
negative, it kills process groups instead of
processes. (On System V, a negative PROCESS
number will also kill process groups, but that's
not portable.) That means you usually want to use
positive not negative signals. You may also use a
signal name in quotes. See the section on Signals
in the perlipc manpage for details.
last LABEL
last The last command is like the break statement in C
(as used in loops); it immediately exits the loop
in question. If the LABEL is omitted, the command
refers to the innermost enclosing loop. The
continue block, if any, is not executed:
LINE: while (<STDIN>) {
last LINE if /^$/; # exit when done with header
#...
}
last cannot be used to exit a block which returns
a value such as eval {}, sub {} or do {}, and
should not be used to exit a grep() or map()
operation.
See also the continue entry elsewhere in this
documentfor an illustration of how last, next, and
redo work.
29/Apr/1999 perl 5.005, patch 03 44
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
lc EXPR
lc Returns an lowercased version of EXPR. This is
the internal function implementing the \L escape
in double-quoted strings. Respects current
LC_CTYPE locale if use locale in force. See the
perllocale manpage.
If EXPR is omitted, uses $_.
lcfirst EXPR
lcfirst Returns the value of EXPR with the first character
lowercased. This is the internal function
implementing the \l escape in double-quoted
strings. Respects current LC_CTYPE locale if use
locale in force. See the perllocale manpage.
If EXPR is omitted, uses $_.
length EXPR
length Returns the length in characters of the value of
EXPR. If EXPR is omitted, returns length of $_.
Note that this cannot be used on an entire array
or hash to find out how many elements these have.
For that, use scalar @array and scalar keys %hash
respectively.
link OLDFILE,NEWFILE
Creates a new filename linked to the old filename.
Returns TRUE for success, FALSE otherwise.
listen SOCKET,QUEUESIZE
Does the same thing that the listen system call
does. Returns TRUE if it succeeded, FALSE
otherwise. See the example in the section on
Sockets: Client/Server Communication in the
perlipc manpage.
local EXPR
You really probably want to be using my() instead,
because local() isn't what most people think of as
"local". See the section on Private Variables via
my() in the perlsub manpage for details.
A local modifies the listed variables to be local
to the enclosing block, file, or eval. If more
than one value is listed, the list must be placed
in parentheses. See the section on Temporary
Values via local() in the perlsub manpage for
details, including issues with tied arrays and
hashes.
29/Apr/1999 perl 5.005, patch 03 45
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
localtime EXPR
Converts a time as returned by the time function
to a 9-element array with the time analyzed for
the local time zone. Typically used as follows:
# 0 1 2 3 4 5 6 7 8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
localtime(time);
All array elements are numeric, and come straight
out of a struct tm. In particular this means that
$mon has the range 0..11 and $wday has the range
0..6 with sunday as day 0. Also, $year is the
number of years since 1900, that is, $year is 123
in year 2023, and not simply the last two digits
of the year. If you assume it is, then you create
non-Y2K-compliant programs--and you wouldn't want
to do that, would you?
If EXPR is omitted, uses the current time
(localtime(time)).
In scalar context, returns the ctime(3) value:
$now_string = localtime; # e.g., "Thu Oct 13 04:54:34 1994"
This scalar value is not locale dependent, see the
perllocale manpage, but instead a Perl builtin.
Also see the Time::Local module, and the
strftime(3) and mktime(3) function available via
the POSIX module. To get somewhat similar but
locale dependent date strings, set up your locale
environment variables appropriately (please see
the perllocale manpage) and try for example:
use POSIX qw(strftime);
$now_string = strftime "%a %b %e %H:%M:%S %Y", localtime;
Note that the %a and %b, the short forms of the
day of the week and the month of the year, may not
necessarily be three characters wide.
log EXPR
log Returns the natural logarithm (base e) of EXPR.
If EXPR is omitted, returns log of $_. To get the
log of another base, use basic algebra: The base-N
log of a number is is equal to the natural log of
that number divided by the natural log of N. For
example:
29/Apr/1999 perl 5.005, patch 03 46
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
sub log10 {
my $n = shift;
return log($n)/log(10);
}
See also the exp entry elsewhere in this
documentfor the inverse operation.
lstat FILEHANDLE
lstat EXPR
lstat Does the same thing as the stat() function
(including setting the special _ filehandle) but
stats a symbolic link instead of the file the
symbolic link points to. If symbolic links are
unimplemented on your system, a normal stat() is
done.
If EXPR is omitted, stats $_.
m// The match operator. See the perlop manpage.
map BLOCK LIST
map EXPR,LIST
Evaluates the BLOCK or EXPR for each element of
LIST (locally setting $_ to each element) and
returns the list value composed of the results of
each such evaluation. Evaluates BLOCK or EXPR in
a list context, so each element of LIST may
produce zero, one, or more elements in the
returned value.
In scalar context, returns the total number of
elements so generated.
@chars = map(chr, @nums);
translates a list of numbers to the corresponding
characters. And
%hash = map { getkey($_) => $_ } @array;
is just a funny way to write
%hash = ();
foreach $_ (@array) {
$hash{getkey($_)} = $_;
}
Note that, because $_ is a reference into the list
value, it can be used to modify the elements of
the array. While this is useful and supported, it
29/Apr/1999 perl 5.005, patch 03 47
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
can cause bizarre results if the LIST is not a
named array. Using a regular foreach loop for
this purpose would be clearer in most cases. See
also the grep entry elsewhere in this documentfor
an array composed of those items of the original
list for which the BLOCK or EXPR evaluates to
true.
mkdir FILENAME,MODE
Creates the directory specified by FILENAME, with
permissions specified by MODE (as modified by
umask). If it succeeds it returns TRUE, otherwise
it returns FALSE and sets $! (errno).
In general, it is better to create directories
with permissive MODEs, and let the user modify
that with their umask, than it is to supply a
restrictive MODE and give the user no way to be
more permissive. The exceptions to this rule are
when the file or directory should be kept private
(mail files, for instance). The perlfunc(1) entry
on umask discusses the choice of MODE in more
detail.
msgctl ID,CMD,ARG
Calls the System V IPC function msgctl(2). You'll
probably have to say
use IPC::SysV;
first to get the correct constant definitions. If
CMD is IPC_STAT, then ARG must be a variable which
will hold the returned msqid_ds structure.
Returns like ioctl(): the undefined value for
error, "0 but true" for zero, or the actual return
value otherwise. See also IPC::SysV and
IPC::Semaphore::Msg documentation.
msgget KEY,FLAGS
Calls the System V IPC function msgget(2).
Returns the message queue id, or the undefined
value if there is an error. See also IPC::SysV
and IPC::SysV::Msg documentation.
msgsnd ID,MSG,FLAGS
Calls the System V IPC function msgsnd to send the
message MSG to the message queue ID. MSG must
begin with the long integer message type, which
may be created with pack("l", $type). Returns
TRUE if successful, or FALSE if there is an error.
See also IPC::SysV and IPC::SysV::Msg
documentation.
29/Apr/1999 perl 5.005, patch 03 48
PERLFUNC(1) Perl Programmers Reference Guide PERLFUNC(1)
msgrcv ID,VAR,SIZE,TYPE,FLAGS
Calls the System V IPC function msgrcv to receive
a message from message queue ID into variable VAR
with a maximum message size of SIZE. Note that if
a message is received, the message type will be
the first thing in VAR, and the maximum length of
VAR is SIZE plus the size of the message type.
Returns TRUE if successful, or FALSE if there is
an error. See also IPC::SysV and IPC::SysV::Msg
documentation.
my EXPR A my() declares the listed variables to be local
(lexically) to the enclosing block, file, or
eval(). If more than one value is listed, the
list must be placed in parentheses. See the
section on Private Variables via my() in the
perlsub manpage for details.
next LABEL
next The next command is like the continue statement in
C; it starts the next iteration of the loop:
LINE: while (<STDIN>) {
next LINE if /^#/; # discard comments
#...
}
Note that if there were a continue block on the
above, it would get executed even on discarded
lines. If the LABEL is omitted, the command
refers to the innermost enclosing loop.
next cannot be used to exit a block which returns
a value such as eval {}, sub {} or do {}, and
should not be used to exit a grep() or map()
operation.
See also the continue entry elsewhere in this
documentfor an illustration of how last, next, and
redo work.
no Module LIST
See the the use entry elsewhere in this
documentfunction, which no is the opposite of.
oct EXPR
oct Interprets EXPR as an octal string and returns the
|