home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Il CD di internet
/
CD.iso
/
SOURCE
/
D
/
PERL
/
PERL-4.036
/
PERL-4
/
perl-4.036
/
Info
/
perl.info-4
< prev
next >
Encoding:
Amiga
Atari
Commodore
DOS
FM Towns/JPY
Macintosh
Macintosh JP
Macintosh to JP
NeXTSTEP
RISC OS/Acorn
Shift JIS
UTF-8
Wrap
GNU Info File
|
1994-07-08
|
49.3 KB
|
1,197 lines
This is Info file perl.info, produced by Makeinfo-1.55 from the input
file perltexi.
This file documents perl, Practical Extraction and Report Language,
and was originally based on Larry Wall's unix-style man page for perl.
GNU Texinfo version adapted by Jeff Kellem
<composer@Beyond.Dreams.ORG>.
Copyright (C) 1989, 1990, 1991, 1992, 1993 Larry Wall Texinfo
version Copyright (C) 1990, 1991, 1993 Jeff Kellem
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
Permission is granted to copy and distribute modified versions of
this manual under the conditions for verbatim copying, provided also
that the sections entitled "GNU General Public License" and "Conditions
for Using Perl" are included exactly as in the original, and provided
that the entire resulting derived work is distributed under the terms
of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions, except that the section entitled "GNU General Public License"
and this permission notice may be included in translations approved by
the Free Software Foundation instead of in the original English.
File: perl.info, Node: Search and Replace Functions, Next: System Interaction, Prev: Input/Output, Up: Commands
Search and Replace Functions
============================
m/PATTERN/gio
/PATTERN/gio
Searches a string for a pattern match, and returns true (1) or
false (''). If no string is specified via the `=~' or `!~'
operator, the `$_' string is searched. (The string specified with
`=~' need not be an lvalue--it may be the result of an expression
evaluation, but remember the `=~' binds rather tightly.) *Note
Regular Expressions::, for more info.
If `/' is the delimiter then the initial `m' is optional. With
the `m' you can use any pair of non-alphanumeric characters as
delimiters. This is particularly useful for matching Unix path
names that contain `/'. If the final delimiter is followed by the
optional letter `i', the matching is done in a case-insensitive
manner. PATTERN may contain references to scalar variables, which
will be interpolated (and the pattern recompiled) every time the
pattern search is evaluated. (Note that `$)' and `$|' may not be
interpolated because they look like end-of-string tests.) If you
want such a pattern to be compiled only once, add an `o' after the
trailing delimiter. This avoids expensive run-time
recompilations, and is useful when the value you are interpolating
won't change over the life of the script. If the PATTERN
evaluates to a null string, the most recent successful regular
expression is used instead.
If used in a context that requires an array value, a pattern match
returns an array consisting of the subexpressions matched by the
parentheses in the pattern, i.e. `($1, $2, $3...)'. It does *NOT*
actually set `$1', `$2', etc. in this case, nor does it set `$+',
`$`', `$&' or `$''. If the match fails, a null array is returned.
If the match succeeds, but there were no parentheses, an array
value of (1) is returned.
Examples:
open(tty, '/dev/tty');
<tty> =~ /^y/i && do foo(); # do foo if desired
if (/Version: *([0-9.]*)/) { $version = $1; }
next if m#^/usr/spool/uucp#;
# poor man's grep
$arg = shift;
while (<>) {
print if /$arg/o; # compile only once
}
if (($F1, $F2, $Etc) = ($foo =~ /^(\S+)\s+(\S+)\s*(.*)/))
This last example splits `$foo' into the first two words and the
remainder of the line, and assigns those three fields to `$F1',
`$F2' and `$Etc'. The conditional is true if any variables were
assigned, i.e. if the pattern matched.
The `g' modifier specifies global pattern matching--that is,
matching as many times as possible within the string. How it
behaves depends on the context. In an array context, it returns a
list of all the substrings matched by all the parentheses in the
regular expression. If there are no parentheses, it returns a
list of all the matched strings, as if there were parentheses
around the whole pattern. In a scalar context, it iterates
through the string, returning TRUE each time it matches, and FALSE
when it eventually runs out of matches. (In other words, it
remembers where it left off last time and restarts the search at
that point.) It presumes that you have not modified the string
since the last match. Modifying the string between matches may
result in undefined behavior. (You can actually get away with
in-place modifications via `substr()' that do not change the
length of the entire string. In general, however, you should be
using `s///g' for such modifications.) Examples:
# array context
($one,$five,$fifteen) = (`uptime` =~ /(\d+\.\d+)/g);
# scalar context
$/ = ""; $* = 1;
while ($paragraph = <>) {
while ($paragraph =~ /[a-z]['")]*[.!?]+['")]*\s/g) {
$sentences++;
}
}
print "$sentences\n";
?PATTERN?
This is just like the `/pattern/' search, except that it matches
only once between calls to the `reset' operator. This is a useful
optimization when you only want to see the first occurrence of
something in each file of a set of files, for instance. Only `??'
patterns local to the current package are reset.
s/PATTERN/REPLACEMENT/gieo
Searches a string for a pattern, and if found, replaces that
pattern with the replacement text and returns the number of
substitutions made. Otherwise it returns false (0). The `g' is
optional, and if present, indicates that all occurrences of the
pattern are to be replaced. The `i' is also optional, and if
present, indicates that matching is to be done in a
case-insensitive manner. The `e' is likewise optional, and if
present, indicates that the replacement string is to be evaluated
as an expression rather than just as a double-quoted string. Any
non-alphanumeric delimiter may replace the slashes; if single
quotes are used, no interpretation is done on the replacement
string (the `e' modifier overrides this, however); if backquotes
are used, the replacement string is a command to execute whose
output will be used as the actual replacement text. If the
PATTERN is delimited by bracketing quotes, the REPLACEMENT has its
own pair of quotes, which may or may not be bracketing quotes,
e.g. `s(foo)(bar)' or `s<foo>/bar/'. If no string is specified
via the `=~' or `!~' operator, the `$_' string is searched and
modified. (The string specified with `=~' must be a scalar
variable, an array element, or an assignment to one of those, i.e.
an lvalue.) If the pattern contains a `$' that looks like a
variable rather than an end-of-string test, the variable will be
interpolated into the pattern at run-time. If you only want the
pattern compiled once the first time the variable is interpolated,
add an `o' at the end. If the PATTERN evaluates to a null string,
the most recent successful regular expression is used instead.
*Note Regular Expressions::, for more info. Examples:
s/\bgreen\b/mauve/g; # don't change wintergreen
$path =~ s|/usr/bin|/usr/local/bin|;
s/Login: $foo/Login: $bar/; # run-time pattern
($foo = $bar) =~ s/bar/foo/;
$_ = 'abc123xyz';
s/\d+/$&*2/e; # yields `abc246xyz'
s/\d+/sprintf("%5d",$&)/e; # yields `abc 246xyz'
s/\w/$& x 2/eg; # yields `aabbcc 224466xxyyzz'
s/([^ ]*) *([^ ]*)/$2 $1/; # reverse 1st two fields
(Note the use of `$' instead of `\' in the last example. *Note
Regular Expressions::.)
study(SCALAR)
study SCALAR
study
Takes extra time to study SCALAR (`$_' if unspecified) in
anticipation of doing many pattern matches on the string before it
is next modified. This may or may not save time, depending on the
nature and number of patterns you are searching on, and on the
distribution of character frequencies in the string to be
searched--you probably want to compare runtimes with and without
it to see which runs faster. Those loops which scan for many
short constant strings (including the constant parts of more
complex patterns) will benefit most. You may have only one study
active at a time--if you study a different scalar the first is
"unstudied". (The way study works is this: a linked list of every
character in the string to be searched is made, so we know, for
example, where all the `k' characters are. From each search
string, the rarest character is selected, based on some static
frequency tables constructed from some C programs and English
text. Only those places that contain this "rarest" character are
examined.)
For example, here is a loop which inserts index producing entries
before any line containing a certain pattern:
while (<>) {
study;
print ".IX foo\n" if /\bfoo\b/;
print ".IX bar\n" if /\bbar\b/;
print ".IX blurfl\n" if /\bblurfl\b/;
...
print;
}
In searching for `/\bfoo\b/', only those locations in `$_' that
contain `f' will be looked at, because `f' is rarer than `o'. In
general, this is a big win except in pathological cases. The only
question is whether it saves you more time than it took to build
the linked list in the first place.
Note that if you have to look for strings that you don't know till
runtime, you can build an entire loop as a string and eval that to
avoid recompiling all your patterns all the time. Together with
undefining `$/' to input entire files as one record, this can be
very fast, often faster than specialized programs like `fgrep'.
The following scans a list of files (`@files') for a list of words
(`@words'), and prints out the names of those files that contain a
match:
$search = 'while (<>) { study;';
foreach $word (@words) {
$search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
}
$search .= "}";
@ARGV = @files;
undef $/
eval $search; # this screams
$/ = "\n"; # put back to normal input delim
foreach $file (sort keys(%seen)) {
print $file, "\n";
}
tr/SEARCHLIST/REPLACEMENTLIST/cds
y/SEARCHLIST/REPLACEMENTLIST/cds
Translates all occurrences of the characters found in the search
list with the corresponding character in the replacement list. It
returns the number of characters replaced or deleted. If no
string is specified via the `=~' or `!~' operator, the `$_' string
is translated. (The string specified with `=~' must be a scalar
variable, an array element, or an assignment to one of those, i.e.
an lvalue.) For `sed' devotees, `y' is provided as a synonym for
`tr'. If the SEARCHLIST is delimited by bracketing quotes, the
REPLACEMENTLIST has its own pair of quotes, which may or may not
be bracketing quotes, e.g. `tr[A-Z][a-z]' or `tr(+-*/)/ABCD/'.
If the `c' modifier is specified, the SEARCHLIST character set is
complemented. If the `d' modifier is specified, any characters
specified by SEARCHLIST that are not found in REPLACEMENTLIST are
deleted. (Note that this is slightly more flexible than the
behavior of some `tr' programs, which delete anything they find in
the SEARCHLIST, period.) If the `s' modifier is specified,
sequences of characters that were translated to the same character
are squashed down to 1 instance of the character.
If the `d' modifier was used, the REPLACEMENTLIST is always
interpreted exactly as specified. Otherwise, if the
REPLACEMENTLIST is shorter than the SEARCHLIST, the final
character is replicated till it is long enough. If the
REPLACEMENTLIST is null, the SEARCHLIST is replicated. The latter
is useful for counting characters in a class, or for squashing
character sequences in a class.
Examples:
$ARGV[1] =~ y/A-Z/a-z/; # canonicalize to lower case
$cnt = tr/*/*/; # count the stars in $_
$cnt = tr/0-9//; # count the digits in $_
tr/a-zA-Z//s; # bookkeeper -> bokeper
($HOST = $host) =~ tr/a-z/A-Z/;
y/\001-@[-_{-\177/ /; # change non-alphas to space
# (before the c & s modifiers)
y/a-zA-Z/ /cs; # change non-alphas to single space
# (version 3.0 patchlevel 40+)
tr/\200-\377/\0-\177/; # delete 8th bit
File: perl.info, Node: System Interaction, Next: Networking Functions, Prev: Search and Replace Functions, Up: Commands
System Interaction
==================
alarm(SECONDS)
alarm SECONDS
Arranges to have a `SIGALRM' delivered to this process after the
specified number of seconds (minus 1, actually) have elapsed.
Thus, `alarm(15)' will cause a `SIGALRM' at some point more than 14
seconds in the future. 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.
chroot(FILENAME)
chroot FILENAME
chroot
Does the same as the system call of that name. If you don't know
what it does, don't worry about it. If FILENAME is omitted, does
`chroot' to `$_'.
die(LIST)
die LIST
die
Outside of an `eval', prints the value of LIST to `STDERR' and
exits with the current value of `$!' (errno). As of version 3.0
patchlevel 27, `die' without LIST specified is equivalent to
die 'Died';
If `$!' is 0, exits with the value of `($? >> 8)' (`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.
Equivalent examples:
die "Can't cd to spool: $!\n" unless chdir '/usr/spool/news';
chdir '/usr/spool/news' || 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'.
exec(LIST)
exec LIST
If there is more than one argument in LIST, or if LIST is an array
with more than one value, calls `execvp()' with the arguments in
LIST. If there is only one scalar argument, the argument is
checked for shell metacharacters. If there are any, the entire
argument is passed to `/bin/sh -c' for parsing. If there are
none, the argument 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 by assigning that
to a variable and putting the name of the variable in front of the
LIST without a comma. (This always forces interpretation of the
LIST as a multi-valued 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
exit(EXPR)
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.
fork
Does a `fork()' call. Returns the child pid to the parent process
and 0 to the child process. Note: unflushed buffers remain
unflushed in both processes, which means you may need to set `$|'
to avoid duplicate output.
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. With an array 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]);
getlogin
Returns the current login from `/etc/utmp', if any. If null, use
`getpwuid'.
$login = getlogin || (getpwuid($<))[0] || "Somebody";
getpgrp(PID)
getpgrp PID
getpgrp
Returns the current process group for the specified PID, 0 for the
current process. Will produce a fatal error if used on a machine
that doesn't implement `getpgrp(2)'. If PID is omitted, returns
process group of current process. PID can be an expression.
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)' man page.) Will produce a fatal
error if used on a machine that doesn't implement `getpriority(2)'.
ioctl(FILEHANDLE,FUNCTION,SCALAR)
Implements the `ioctl(2)' function. You'll probably have to say
require "ioctl.ph"; # probably `/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
`<sys/ioctl.h>'. (There is a perl script called `h2ph' that comes
with the perl kit which may help you in this.) 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';
$sgttyb_t = "ccccs"; # 4 chars and a short
if (ioctl(STDIN,$TIOCGETP,$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: 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;
kill(LIST)
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;
If the signal is negative, kills process groups instead of
processes. (On System V, a negative *process* number will also
kill process groups, but that's not portable.) You may use a
signal name in quotes.
setpgrp(PID,PGRP)
Sets the current process group for the specified PID, 0 for the
current process. Will produce a fatal error if used on a machine
that doesn't implement `setpgrp(2)'.
setpriority(WHICH,WHO,PRIORITY)
Sets the current priority for a process, a process group, or a
user. (See the `setpriority(2)' man page.) Will produce a fatal
error if used on a machine that doesn't implement `setpriority(2)'.
sleep(EXPR)
sleep EXPR
sleep
Causes the script to sleep for EXPR seconds, or forever if no
EXPR. May be interrupted by sending the process a `SIGALRM'.
Returns the number of seconds actually slept. You probably cannot
mix `alarm()' and `sleep()' calls, since `sleep()' is often
implemented using `alarm()'.
syscall(LIST)
syscall LIST
Calls the system call specified as the first element of the list,
passing the remaining elements as arguments to the system call. If
unimplemented, produces a fatal error. The arguments are
interpreted as follows: if a given argument is numeric, the
argument is passed as an int. If not, the pointer to the string
value is passed. You are responsible to make sure a string is
pre-extended long enough to receive any result that might be
written into a string. If your integer arguments are not literals
and have never been interpreted in a numeric context, you may need
to add 0 to them to force them to look like numbers.
require 'syscall.ph'; # may need to run h2ph
syscall(&SYS_write, fileno(STDOUT), "hi there\n", 9);
sysread(FILEHANDLE,SCALAR,LENGTH,OFFSET)
sysread(FILEHANDLE,SCALAR,LENGTH)
Attempts to read LENGTH bytes of data into variable SCALAR from
the specified FILEHANDLE, using the system call `read(2)'. It
bypasses stdio, so mixing this with other kinds of reads may cause
confusion. Returns the number of bytes actually read, or `undef'
if there was an error. SCALAR will be grown or shrunk to the
length actually read. An OFFSET may be specified to place the
read data at some other place than the beginning of the string.
syswrite(FILEHANDLE,SCALAR,LENGTH,OFFSET)
syswrite(FILEHANDLE,SCALAR,LENGTH)
Attempts to write LENGTH bytes of data from variable SCALAR to the
specified FILEHANDLE, using the system call `write(2)'. It
bypasses stdio, so mixing this with prints may cause confusion.
Returns the number of bytes actually written, or `undef' if there
was an error. An OFFSET may be specified to place the read data
at some other place than the beginning of the string.
system(LIST)
system LIST
Does exactly the same thing as `exec LIST' except that a fork is
done first, and the parent process waits for the child process to
complete. Note that argument processing varies depending on the
number of arguments. The return value is the exit status of the
program as returned by the `wait()' call. To get the actual exit
value divide by 256. See also `exec'.
times
Returns a four-element array giving the user and system times, in
seconds, for this process and the children of this process.
($user,$system,$cuser,$csystem) = times;
umask(EXPR)
umask EXPR
umask
Sets the umask for the process and returns the old one. If EXPR
is omitted, merely returns current umask.
wait
Waits for a child process to terminate and returns the pid of the
deceased process, or -1 if there are no child processes. The
status is returned in `$?'.
waitpid(PID,FLAGS)
Waits for a particular child process to terminate and returns the
pid of the deceased process or -1 if there are no such child
process. The status is returns in `$?'. If you say
require "sys/wait.ph";
...
waitpid(-1,&WNOHANG);
then you can do a non-blocking wait for any process. Non-blocking
wait is only available on machines supporting either the
`waitpid(2)' or `wait4(2)' system calls. However, waiting for a
particular pid with FLAGS of 0 is implemented everywhere. (*Perl*
emulates the system call by remembering the status values of
processes that have exited but have not been harvested by the
*Perl* script yet.)
warn(LIST)
warn LIST
Produces a message on `STDERR' just like `die', but doesn't exit.
File: perl.info, Node: Networking Functions, Next: System V IPC, Prev: System Interaction, Up: Commands
Networking Functions - Interprocess Communication
=================================================
accept(NEWSOCKET,GENERICSOCKET)
Does the same thing that the `accept' system call does. Returns
true if it succeeded, false otherwise. *Note Interprocess
Communication::, for an example.
bind(SOCKET,NAME)
Does the same thing that the `bind' system call does. Returns true
if it succeeded, false otherwise. NAME should be a packed address
of the proper type for the socket. *Note Interprocess
Communication::, for an example.
connect(SOCKET,NAME)
Does the same thing that the `connect' system call does. Returns
true if it succeeded, false otherwise. NAME should be a packed
address of the proper type for the socket. *Note Interprocess
Communication::, for an example.
getpeername(SOCKET)
Returns the packed *sockaddr* address of other end of the SOCKET
connection.
# An internet sockaddr
$sockaddr = 'S n a4 x8';
$hersockaddr = getpeername(S);
($family, $port, $heraddr) = unpack($sockaddr,$hersockaddr);
getsockname(SOCKET)
Returns the packed *sockaddr* address of this end of the SOCKET
connection.
# An internet sockaddr
$sockaddr = 'S n a4 x8';
$mysockaddr = getsockname(S);
($family, $port, $myaddr) = unpack($sockaddr,$mysockaddr);
getsockopt(SOCKET,LEVEL,OPTNAME)
Returns the socket option requested, or undefined if there is an
error.
listen(SOCKET,QUEUESIZE)
Does the same thing that the `listen' system call does. Returns
true if it succeeded, false otherwise. *Note Interprocess
Communication::, for an example.
recv(SOCKET,SCALAR,LEN,FLAGS)
Receives a message on a socket. Attempts to receive LENGTH bytes
of data into variable SCALAR from the specified SOCKET filehandle.
Returns the address of the sender, or the undefined value if
there's an error. SCALAR will be grown or shrunk to the length
actually read. Takes the same flags as the system call of the same
name.
send(SOCKET,MSG,FLAGS,TO)
send(SOCKET,MSG,FLAGS)
Sends a message on a socket. Takes the same flags as the system
call of the same name. On unconnected sockets you must specify a
destination to send TO. Returns the number of characters sent, or
the undefined value if there is an error.
setsockopt(SOCKET,LEVEL,OPTNAME,OPTVAL)
Sets the socket option requested. Returns undefined if there is an
error. OPTVAL may be specified as `undef' if you don't want to
pass an argument.
shutdown(SOCKET,HOW)
Shuts down a socket connection in the manner indicated by HOW,
which has the same interpretation as in the system call of the same
name.
socket(SOCKET,DOMAIN,TYPE,PROTOCOL)
Opens a socket of the specified kind and attaches it to filehandle
SOCKET. DOMAIN, TYPE and PROTOCOL are specified the same as for
the system call of the same name. You may need to run `h2ph' on
`sys/socket.h' to get the proper values handy in a perl library
file. Return true if successful. *Note Interprocess
Communication::, for an example.
socketpair(SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL)
Creates an unnamed pair of sockets in the specified domain, of the
specified type. DOMAIN, TYPE and PROTOCOL are specified the same
as for the system call of the same name. If unimplemented, yields
a fatal error. Return true if successful.
File: perl.info, Node: System V IPC, Next: Time Functions, Prev: Networking Functions, Up: Commands
Networking Functions - System V IPC
===================================
msgctl(ID,CMD,ARG)
Calls the System V IPC function `msgctl'. 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'. 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.
semctl(ID,SEMNUM,CMD,ARG)
Calls the System V IPC function `semctl'. If CMD is &IPC_STAT or
&GETALL, then ARG must be a variable which will hold the returned
semid_ds structure or semaphore value array. Returns like
`ioctl': the undefined value for error, "0 but true" for zero, or
the actual return value otherwise.
semget(KEY,NSEMS,SIZE,FLAGS)
Calls the System V IPC function `semget'. Returns the semaphore
id, or the undefined value if there is an error.
semop(KEY,OPSTRING)
Calls the System V IPC function `semop' to perform semaphore
operations such as signaling and waiting. OPSTRING must be a
packed array of semop structures. Each semop structure can be
generated with `pack("sss", $semnum, $semop, $semflag)'. The
number of semaphore operations is implied by the length of
OPSTRING. Returns true if successful, or false if there is an
error. As an example, the following code waits on semaphore
$semnum of semaphore id $semid:
$semop = pack("sss", $semnum, -1, 0);
die "Semaphore trouble: $!\n" unless semop($semid, $semop);
To signal the semaphore, replace `-1' with `1'.
shmctl(ID,CMD,ARG)
Calls the System V IPC function `shmctl'. If CMD is &IPC_STAT,
then ARG must be a variable which will hold the returned shmid_ds
structure. Returns like `ioctl': the undefined value for error,
"0 but true" for zero, or the actual return value otherwise.
shmget(KEY,SIZE,FLAGS)
Calls the System V IPC function `shmget'. Returns the shared
memory segment id, or the undefined value if there is an error.
shmread(ID,VAR,POS,SIZE)
shmwrite(ID,STRING,POS,SIZE)
Reads or writes the System V shared memory segment ID starting at
position POS for size SIZE by attaching to it, copying in/out, and
detaching from it. When reading, VAR must be a variable which
will hold the data read. When writing, if STRING is too long,
only SIZE bytes are used; if STRING is too short, nulls are
written to fill out SIZE bytes. Returns true if successful, or
false if there is an error.
File: perl.info, Node: Time Functions, Next: DBM Functions, Prev: System V IPC, Up: Commands
Time Related Functions
======================
gmtime(EXPR)
gmtime EXPR
gmtime
Converts a time as returned by the `time' function to a 9-element
array with the time analyzed for the Greenwich timezone.
Typically used as follows:
($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'. If EXPR is omitted, does
`gmtime(time)'.
localtime(EXPR)
localtime EXPR
localtime
Converts a time as returned by the time function to a 9-element
array with the time analyzed for the local timezone. Typically
used as follows:
($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'. If EXPR is omitted, does
`localtime(time)'.
time
Returns the number of non-leap seconds since 00:00:00 UTC, January
1, 1970. Suitable for feeding to `gmtime()' and `localtime()'.
File: perl.info, Node: DBM Functions, Next: Flow Control Functions, Prev: Time Functions, Up: Commands
DBM Functions
=============
dbmclose(ASSOC_ARRAY)
dbmclose ASSOC_ARRAY
Breaks the binding between a dbm file and an associative array.
The values remaining in the associative array are meaningless
unless you happen to want to know what was in the cache for the
dbm file. This function is only useful if you have ndbm.
dbmopen(ASSOC,DBNAME,MODE)
This binds a dbm or ndbm file to an associative array. ASSOC is
the name of the associative array. (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 the database does not exist, it is created with
protection specified by MODE (as modified by the umask). If your
system only supports the older dbm functions, you may perform only
one `dbmopen' in your program. If your system has neither dbm nor
ndbm, calling `dbmopen' produces a fatal error.
Values assigned to the associative array prior to the `dbmopen' are
lost. A certain number of values from the dbm file are cached in
memory. By default this number is 64, but you can increase it by
preallocating that number of garbage entries in the associative
array before the `dbmopen'. You can flush the cache if necessary
with the reset command.
If you don't have write access to the dbm file, you can only read
associative array variables, not set them. If you want to test
whether you can write, either use file tests or try setting a
dummy array 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);
File: perl.info, Node: Flow Control Functions, Next: Perl Library Functions, Prev: DBM Functions, Up: Commands
Flow Control Functions
======================
do BLOCK
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.)
goto LABEL
Finds the statement labeled with LABEL and resumes execution
there. Currently you may only go to statements in the main body
of the program that are not nested inside a `do {}' construct.
This statement is not implemented very efficiently, and is here
only to make the *sed*-to-*perl* translator easier. I may change
its semantics at any time, consistent with support for translated
`sed' scripts. Use it at your own risk. Better yet, don't use it
at all.
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
...
}
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.
redo LABEL
redo
The `redo' command restarts the loop block without evaluating the
conditional again. The `continue' block, if any, is not executed.
If the LABEL is omitted, the command refers to the innermost
enclosing loop. This command is normally used by programs that
want to lie to themselves about what was just input:
# a simpleminded Pascal comment stripper
# (warning: assumes no { or } in strings)
line: while (<STDIN>) {
while (s|({.*}.*){.*}|$1 |) {}
s|{.*}| |;
if (s|{.*| |) {
$front = $_;
while (<STDIN>) {
if (/}/) { # end of comment?
s|^|$front{|;
redo line;
}
}
}
print;
}
File: perl.info, Node: Perl Library Functions, Next: Subroutine Functions, Prev: Flow Control Functions, Up: Commands
Perl Library Functions
======================
require(EXPR)
require EXPR
require
Includes the library file specified by EXPR, or by `$_' if EXPR is
not supplied. Has semantics similar to the following subroutine:
sub require {
local($filename) = @_;
return 1 if $INC{$filename};
local($realfilename,$result);
ITER: {
foreach $prefix (@INC) {
$realfilename = "$prefix/$filename";
if (-f $realfilename) {
$result = do $realfilename;
last ITER;
}
}
die "Can't find $filename in \@INC";
}
die $@ if $@;
die "$filename did not return true value" unless $result;
$INC{$filename} = $realfilename;
$result;
}
Note that the file will not be included twice under the same
specified name. The file must return true as the last statement
to indicate successful execution of any initialization code, so
it's customary to end such a file with `1;' unless you're sure
it'll return true otherwise.
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
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 `-I'
libraries if the file isn't in the current directory (*note "INC"
array: Predefined Names., for more info). It's the same, however,
in that it does reparse the file every time you call it, so if you
are going to use the file inside a loop you might prefer to use
`-P' and `#include', at the expense of a little more startup time.
(The main problem with `#include' is that cpp doesn't grok `#'
comments--a workaround is to use `;#' for standalone comments.)
Note that the following are *NOT* equivalent:
do $foo; # eval a file
do $foo(); # call a subroutine
Note that inclusion of library routines is better done with the
`require' operator.
File: perl.info, Node: Subroutine Functions, Next: Variable Functions, Prev: Perl Library Functions, Up: Commands
Subroutine Functions
====================
caller(EXPR)
caller
Returns the context of the current subroutine call:
($package,$filename,$line) = caller;
With EXPR, 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.
do SUBROUTINE (LIST)
Executes a SUBROUTINE declared by a `sub' declaration, and returns
the value of the last expression evaluated in SUBROUTINE. If
there is no subroutine by that name, produces a fatal error. (You
may use the `defined' operator to determine if a subroutine
exists.) If you pass arrays as part of LIST you may wish to pass
the length of the array in front of each array. (*Note
Subroutines::.) The parentheses are required to avoid confusion
with the `do EXPR' form.
SUBROUTINE may also be a single scalar variable, in which case the
name of the subroutine to execute is take from the variable.
As an alternate (and preferred) form, you may call a subroutine by
prefixing the name with an ampersand: `&foo(@args)'. If you
aren't passing any arguments, you don't have to use parentheses.
If you omit the parentheses, no `@_' array is passed to the
subroutine. The `&' form is also used to specify subroutines to
the `defined' and `undef' operators.
if (defined &$var) { &$var($parm); undef &$var; }
local(LIST)
Declares the listed variables to be local to the enclosing block,
subroutine, `eval' or `do'. All the listed elements must be legal
lvalues. This operator works by saving the current values of
those variables in LIST on a hidden stack and restoring them upon
exiting the block, subroutine or `eval'. This means that called
subroutines can also reference the local variable, but not the
global one. The LIST may be assigned to if desired, which allows
you to initialize your local variables. (If no initializer is
given for a particular variable, it is created with an undefined
value.) Commonly this is used to name the parameters to a
subroutine. Examples:
sub RANGEVAL {
local($min, $max, $thunk) = @_;
local($result) = '';
local($i);
# Presumably $thunk makes reference to $i
for ($i = $min; $i < $max; $i++) {
$result .= eval $thunk;
}
$result;
}
if ($sw eq '-v') {
# init local array with global array
local(@ARGV) = @ARGV;
unshift(@ARGV,'echo');
system @ARGV;
}
# @ARGV restored
# temporarily add to digits associative array
if ($base12) {
# (NOTE: not claiming this is efficient!)
local(%digits) = (%digits,'t',10,'e',11);
do parse_num();
}
Note that `local()' is a run-time command, and so gets executed
every time through a loop, using up more stack storage each time
until it's all released at once when the loop is exited.
return LIST
Returns from a subroutine with the value specified. (Note that a
subroutine can automatically return the value of the last
expression evaluated. That's the preferred method--use of an
explicit `return' is a bit slower.)
wantarray
Returns true if the context of the currently executing subroutine
is looking for an array value. Returns false if the context is
looking for a scalar.
return wantarray ? () : undef;
File: perl.info, Node: Variable Functions, Next: Miscellaneous Functions, Prev: Subroutine Functions, Up: Commands
Variable Functions
==================
defined(EXPR)
defined EXPR
Returns a boolean value saying whether the lvalue EXPR has a real
value or not. Many operations return the undefined value under
exceptional conditions, such as end of file, uninitialized
variable, system error and such. This function allows you to
distinguish between an undefined null string and a defined null
string with operations that might return a real null string, in
particular referencing elements of an array. You may also check
to see if arrays or subroutines exist. Use on predefined
variables is not guaranteed to produce intuitive results.
Examples:
print if defined $switch{'D'};
print "$val\n" while defined($val = pop(@ary));
die "Can't readlink $sym: $!"
unless defined($value = readlink $sym);
eval '@foo = ()' if defined(@foo);
die "No XYZ package defined" unless defined %_XYZ;
sub foo { defined &$bar ? &$bar(@_) : die "No bar"; }
See also `undef'.
reset(EXPR)
reset EXPR
reset
Generally used in a `continue' block at the end of a loop to clear
variables and reset `??' searches so that they work again. The
expression is interpreted as a list of single characters (hyphens
allowed for ranges). All variables and arrays beginning with one
of those letters are reset to their pristine state. If the
expression is omitted, one-match searches (`?pattern?') are reset
to match again. Only resets variables or searches in the current
package. Always returns 1. Examples:
reset 'X'; # reset all X variables
reset 'a-z'; # reset lower case variables
reset; # just reset `??' searches
Note: resetting `A-Z' is not recommended since you'll wipe out your
`ARGV' and `ENV' arrays.
The use of reset on dbm associative arrays does not change the dbm
file. (It does, however, flush any entries cached by perl, which
may be useful if you are sharing the dbm file. Then again, maybe
not.)
scalar(EXPR)
Forces EXPR to be interpreted in a scalar context and returns the
value of EXPR.
undef(EXPR)
undef EXPR
undef
Undefines the value of EXPR, which must be an lvalue. Use only on
a scalar value, an entire array, or a subroutine name (using `&').
(`undef' will probably not do what you expect on most predefined
variables or dbm array values.) Always returns the undefined
value. You can omit the EXPR, in which case nothing is undefined,
but you still get an undefined value that you could, for instance,
return from a subroutine. Examples:
undef $foo;
undef $bar{'blurfl'};
undef @ary;
undef %assoc;
undef &mysub;
return (wantarray ? () : undef) if $they_blew_it;