perl 3.0 patch #7 (combined patch)
[p5sagit/p5-mst-13.2.git] / perl.man.3
CommitLineData
a687059c 1''' Beginning of part 3
ffed7fef 2''' $Header: perl.man.3,v 3.0.1.2 89/11/17 15:31:05 lwall Locked $
a687059c 3'''
4''' $Log: perl.man.3,v $
ffed7fef 5''' Revision 3.0.1.2 89/11/17 15:31:05 lwall
6''' patch5: fixed some manual typos and indent problems
7''' patch5: added warning about print making an array context
8'''
ae986130 9''' Revision 3.0.1.1 89/11/11 04:45:06 lwall
10''' patch2: made some line breaks depend on troff vs. nroff
11'''
a687059c 12''' Revision 3.0 89/10/18 15:21:46 lwall
13''' 3.0 baseline
14'''
15.Ip "next LABEL" 8 8
16.Ip "next" 8
17The
18.I next
19command is like the
20.I continue
21statement in C; it starts the next iteration of the loop:
22.nf
23
24.ne 4
25 line: while (<STDIN>) {
26 next line if /\|^#/; # discard comments
27 .\|.\|.
28 }
29
30.fi
31Note that if there were a
32.I continue
33block on the above, it would get executed even on discarded lines.
34If the LABEL is omitted, the command refers to the innermost enclosing loop.
35.Ip "oct(EXPR)" 8 4
36.Ip "oct EXPR" 8
37Returns the decimal value of EXPR interpreted as an octal string.
38(If EXPR happens to start off with 0x, interprets it as a hex string instead.)
39The following will handle decimal, octal and hex in the standard notation:
40.nf
41
42 $val = oct($val) if $val =~ /^0/;
43
44.fi
45If EXPR is omitted, uses $_.
46.Ip "open(FILEHANDLE,EXPR)" 8 8
47.Ip "open(FILEHANDLE)" 8
48.Ip "open FILEHANDLE" 8
49Opens the file whose filename is given by EXPR, and associates it with
50FILEHANDLE.
51If FILEHANDLE is an expression, its value is used as the name of the
52real filehandle wanted.
53If EXPR is omitted, the scalar variable of the same name as the FILEHANDLE
54contains the filename.
55If the filename begins with \*(L"<\*(R" or nothing, the file is opened for
56input.
57If the filename begins with \*(L">\*(R", the file is opened for output.
58If the filename begins with \*(L">>\*(R", the file is opened for appending.
59(You can put a \'+\' in front of the \'>\' or \'<\' to indicate that you
60want both read and write access to the file.)
61If the filename begins with \*(L"|\*(R", the filename is interpreted
62as a command to which output is to be piped, and if the filename ends
63with a \*(L"|\*(R", the filename is interpreted as command which pipes
64input to us.
65(You may not have a command that pipes both in and out.)
66Opening \'\-\' opens
67.I STDIN
68and opening \'>\-\' opens
69.IR STDOUT .
70Open returns non-zero upon success, the undefined value otherwise.
71If the open involved a pipe, the return value happens to be the pid
72of the subprocess.
73Examples:
74.nf
75
76.ne 3
77 $article = 100;
78 open article || die "Can't find article $article: $!\en";
79 while (<article>) {\|.\|.\|.
80
ae986130 81.ie t \{\
a687059c 82 open(LOG, \'>>/usr/spool/news/twitlog\'\|); # (log is reserved)
ae986130 83'br\}
84.el \{\
85 open(LOG, \'>>/usr/spool/news/twitlog\'\|);
86 # (log is reserved)
87'br\}
a687059c 88
ae986130 89.ie t \{\
a687059c 90 open(article, "caesar <$article |"\|); # decrypt article
ae986130 91'br\}
92.el \{\
93 open(article, "caesar <$article |"\|);
94 # decrypt article
95'br\}
a687059c 96
ae986130 97.ie t \{\
a687059c 98 open(extract, "|sort >/tmp/Tmp$$"\|); # $$ is our process#
ae986130 99'br\}
100.el \{\
101 open(extract, "|sort >/tmp/Tmp$$"\|);
102 # $$ is our process#
103'br\}
a687059c 104
105.ne 7
106 # process argument list of files along with any includes
107
108 foreach $file (@ARGV) {
109 do process($file, \'fh00\'); # no pun intended
110 }
111
112 sub process {
113 local($filename, $input) = @_;
114 $input++; # this is a string increment
115 unless (open($input, $filename)) {
116 print STDERR "Can't open $filename: $!\en";
117 return;
118 }
ae986130 119.ie t \{\
a687059c 120 while (<$input>) { # note the use of indirection
ae986130 121'br\}
122.el \{\
123 while (<$input>) { # note use of indirection
124'br\}
a687059c 125 if (/^#include "(.*)"/) {
126 do process($1, $input);
127 next;
128 }
129 .\|.\|. # whatever
130 }
131 }
132
133.fi
134You may also, in the Bourne shell tradition, specify an EXPR beginning
135with \*(L">&\*(R", in which case the rest of the string
136is interpreted as the name of a filehandle
137(or file descriptor, if numeric) which is to be duped and opened.
ae986130 138You may use & after >, >>, <, +>, +>> and +<.
139The mode you specify should match the mode of the original filehandle.
a687059c 140Here is a script that saves, redirects, and restores
141.I STDOUT
142and
ae986130 143.IR STDERR :
a687059c 144.nf
145
146.ne 21
147 #!/usr/bin/perl
148 open(SAVEOUT, ">&STDOUT");
149 open(SAVEERR, ">&STDERR");
150
151 open(STDOUT, ">foo.out") || die "Can't redirect stdout";
152 open(STDERR, ">&STDOUT") || die "Can't dup stdout";
153
154 select(STDERR); $| = 1; # make unbuffered
155 select(STDOUT); $| = 1; # make unbuffered
156
157 print STDOUT "stdout 1\en"; # this works for
158 print STDERR "stderr 1\en"; # subprocesses too
159
160 close(STDOUT);
161 close(STDERR);
162
163 open(STDOUT, ">&SAVEOUT");
164 open(STDERR, ">&SAVEERR");
165
166 print STDOUT "stdout 2\en";
167 print STDERR "stderr 2\en";
168
169.fi
170If you open a pipe on the command \*(L"\-\*(R", i.e. either \*(L"|\-\*(R" or \*(L"\-|\*(R",
171then there is an implicit fork done, and the return value of open
172is the pid of the child within the parent process, and 0 within the child
173process.
174(Use defined($pid) to determine if the open was successful.)
175The filehandle behaves normally for the parent, but i/o to that
176filehandle is piped from/to the
177.IR STDOUT / STDIN
178of the child process.
179In the child process the filehandle isn't opened\*(--i/o happens from/to
180the new
181.I STDOUT
182or
183.IR STDIN .
184Typically this is used like the normal piped open when you want to exercise
185more control over just how the pipe command gets executed, such as when
186you are running setuid, and don't want to have to scan shell commands
187for metacharacters.
188The following pairs are equivalent:
189.nf
190
191.ne 5
192 open(FOO, "|tr \'[a\-z]\' \'[A\-Z]\'");
193 open(FOO, "|\-") || exec \'tr\', \'[a\-z]\', \'[A\-Z]\';
194
195 open(FOO, "cat \-n $file|");
196 open(FOO, "\-|") || exec \'cat\', \'\-n\', $file;
197
198.fi
199Explicitly closing any piped filehandle causes the parent process to wait for the
200child to finish, and returns the status value in $?.
201.Ip "opendir(DIRHANDLE,EXPR)" 8 3
202Opens a directory named EXPR for processing by readdir(), telldir(), seekdir(),
203rewinddir() and closedir().
204Returns true if successful.
205DIRHANDLEs have their own namespace separate from FILEHANDLEs.
206.Ip "ord(EXPR)" 8 4
207.Ip "ord EXPR" 8
208Returns the ascii value of the first character of EXPR.
209If EXPR is omitted, uses $_.
210.Ip "pack(TEMPLATE,LIST)" 8 4
211Takes an array or list of values and packs it into a binary structure,
212returning the string containing the structure.
213The TEMPLATE is a sequence of characters that give the order and type
214of values, as follows:
215.nf
216
217 A An ascii string, will be space padded.
218 a An ascii string, will be null padded.
219 c A native char value.
220 C An unsigned char value.
221 s A signed short value.
222 S An unsigned short value.
223 i A signed integer value.
224 I An unsigned integer value.
225 l A signed long value.
226 L An unsigned long value.
227 n A short in \*(L"network\*(R" order.
228 N A long in \*(L"network\*(R" order.
229 p A pointer to a string.
230 x A null byte.
231
232.fi
233Each letter may optionally be followed by a number which gives a repeat
234count.
235With all types except "a" and "A" the pack function will gobble up that many values
236from the LIST.
237The "a" and "A" types gobble just one value, but pack it as a string that long,
238padding with nulls or spaces as necessary.
239(When unpacking, "A" strips trailing spaces and nulls, but "a" does not.)
240Examples:
241.nf
242
243 $foo = pack("cccc",65,66,67,68);
244 # foo eq "ABCD"
245 $foo = pack("c4",65,66,67,68);
246 # same thing
247
248 $foo = pack("ccxxcc",65,66,67,68);
249 # foo eq "AB\e0\e0CD"
250
251 $foo = pack("s2",1,2);
252 # "\e1\e0\e2\e0" on little-endian
253 # "\e0\e1\e0\e2" on big-endian
254
255 $foo = pack("a4","abcd","x","y","z");
256 # "abcd"
257
258 $foo = pack("aaaa","abcd","x","y","z");
259 # "axyz"
260
261 $foo = pack("a14","abcdefg");
262 # "abcdefg\e0\e0\e0\e0\e0\e0\e0"
263
ae986130 264 $foo = pack("i9pl", gmtime);
a687059c 265 # a real struct tm (on my system anyway)
266
267.fi
268The same template may generally also be used in the unpack function.
269.Ip "pop(ARRAY)" 8
270.Ip "pop ARRAY" 8 6
271Pops and returns the last value of the array, shortening the array by 1.
272Has the same effect as
273.nf
274
275 $tmp = $ARRAY[$#ARRAY\-\|\-];
276
277.fi
278If there are no elements in the array, returns the undefined value.
279.Ip "print(FILEHANDLE LIST)" 8 10
280.Ip "print(LIST)" 8
281.Ip "print FILEHANDLE LIST" 8
282.Ip "print LIST" 8
283.Ip "print" 8
284Prints a string or a comma-separated list of strings.
285Returns non-zero if successful.
286FILEHANDLE may be a scalar variable name, in which case the variable contains
287the name of the filehandle, thus introducing one level of indirection.
288If FILEHANDLE is omitted, prints by default to standard output (or to the
289last selected output channel\*(--see select()).
290If LIST is also omitted, prints $_ to
291.IR STDOUT .
292To set the default output channel to something other than
293.I STDOUT
294use the select operation.
ffed7fef 295Note that, because print takes a LIST, anything in the LIST is evaluated
296in an array context, and any subroutine that you call will have one or more
297of its expressions evaluated in an array context.
a687059c 298.Ip "printf(FILEHANDLE LIST)" 8 10
299.Ip "printf(LIST)" 8
300.Ip "printf FILEHANDLE LIST" 8
301.Ip "printf LIST" 8
302Equivalent to a \*(L"print FILEHANDLE sprintf(LIST)\*(R".
303.Ip "push(ARRAY,LIST)" 8 7
304Treats ARRAY (@ is optional) as a stack, and pushes the values of LIST
305onto the end of ARRAY.
306The length of ARRAY increases by the length of LIST.
307Has the same effect as
308.nf
309
310 for $value (LIST) {
311 $ARRAY[++$#ARRAY] = $value;
312 }
313
314.fi
315but is more efficient.
316.Ip "q/STRING/" 8 5
317.Ip "qq/STRING/" 8
318These are not really functions, but simply syntactic sugar to let you
319avoid putting too many backslashes into quoted strings.
320The q operator is a generalized single quote, and the qq operator a
321generalized double quote.
322Any delimiter can be used in place of /, including newline.
323If the delimiter is an opening bracket or parenthesis, the final delimiter
324will be the corresponding closing bracket or parenthesis.
325(Embedded occurrences of the closing bracket need to be backslashed as usual.)
326Examples:
327.nf
328
329.ne 5
330 $foo = q!I said, "You said, \'She said it.\'"!;
331 $bar = q(\'This is it.\');
332 $_ .= qq
333*** The previous line contains the naughty word "$&".\en
334 if /(ibm|apple|awk)/; # :-)
335
336.fi
337.Ip "rand(EXPR)" 8 8
338.Ip "rand EXPR" 8
339.Ip "rand" 8
340Returns a random fractional number between 0 and the value of EXPR.
341(EXPR should be positive.)
342If EXPR is omitted, returns a value between 0 and 1.
343See also srand().
344.Ip "read(FILEHANDLE,SCALAR,LENGTH)" 8 5
345Attempts to read LENGTH bytes of data into variable SCALAR from the specified
346FILEHANDLE.
347Returns the number of bytes actually read.
348SCALAR will be grown or shrunk to the length actually read.
349.Ip "readdir(DIRHANDLE)" 8 3
ae986130 350.Ip "readdir DIRHANDLE" 8
a687059c 351Returns the next directory entry for a directory opened by opendir().
352If used in an array context, returns all the rest of the entries in the
353directory.
354If there are no more entries, returns an undefined value in a scalar context
355or a null list in an array context.
356.Ip "readlink(EXPR)" 8 6
357.Ip "readlink EXPR" 8
358Returns the value of a symbolic link, if symbolic links are implemented.
359If not, gives a fatal error.
360If there is some system error, returns the undefined value and sets $! (errno).
361If EXPR is omitted, uses $_.
362.Ip "recv(SOCKET,SCALAR,LEN,FLAGS)" 8 4
363Receives a message on a socket.
364Attempts to receive LENGTH bytes of data into variable SCALAR from the specified
365SOCKET filehandle.
366Returns the address of the sender, or the undefined value if there's an error.
367SCALAR will be grown or shrunk to the length actually read.
368Takes the same flags as the system call of the same name.
369.Ip "redo LABEL" 8 8
370.Ip "redo" 8
371The
372.I redo
373command restarts the loop block without evaluating the conditional again.
374The
375.I continue
376block, if any, is not executed.
377If the LABEL is omitted, the command refers to the innermost enclosing loop.
378This command is normally used by programs that want to lie to themselves
379about what was just input:
380.nf
381
382.ne 16
383 # a simpleminded Pascal comment stripper
384 # (warning: assumes no { or } in strings)
385 line: while (<STDIN>) {
386 while (s|\|({.*}.*\|){.*}|$1 \||) {}
387 s|{.*}| \||;
388 if (s|{.*| \||) {
389 $front = $_;
390 while (<STDIN>) {
391 if (\|/\|}/\|) { # end of comment?
392 s|^|$front{|;
393 redo line;
394 }
395 }
396 }
397 print;
398 }
399
400.fi
401.Ip "rename(OLDNAME,NEWNAME)" 8 2
402Changes the name of a file.
403Returns 1 for success, 0 otherwise.
404Will not work across filesystem boundaries.
405.Ip "reset(EXPR)" 8 6
406.Ip "reset EXPR" 8
407.Ip "reset" 8
408Generally used in a
409.I continue
410block at the end of a loop to clear variables and reset ?? searches
411so that they work again.
412The expression is interpreted as a list of single characters (hyphens allowed
413for ranges).
414All variables and arrays beginning with one of those letters are reset to
415their pristine state.
416If the expression is omitted, one-match searches (?pattern?) are reset to
417match again.
418Only resets variables or searches in the current package.
419Always returns 1.
420Examples:
421.nf
422
423.ne 3
424 reset \'X\'; \h'|2i'# reset all X variables
425 reset \'a\-z\';\h'|2i'# reset lower case variables
426 reset; \h'|2i'# just reset ?? searches
427
428.fi
429Note: resetting \*(L"A\-Z\*(R" is not recommended since you'll wipe out your ARGV and ENV
430arrays.
431.Sp
432The use of reset on dbm associative arrays does not change the dbm file.
433(It does, however, flush any entries cached by perl, which may be useful if
434you are sharing the dbm file.
435Then again, maybe not.)
436.Ip "return LIST" 8 3
437Returns from a subroutine with the value specified.
438(Note that a subroutine can automatically return
439the value of the last expression evaluated.
440That's the preferred method\*(--use of an explicit
441.I return
442is a bit slower.)
443.Ip "reverse(LIST)" 8 4
444.Ip "reverse LIST" 8
445Returns an array value consisting of the elements of LIST in the opposite order.
446.Ip "rewinddir(DIRHANDLE)" 8 5
447.Ip "rewinddir DIRHANDLE" 8
448Sets the current position to the beginning of the directory for the readdir() routine on DIRHANDLE.
449.Ip "rindex(STR,SUBSTR)" 8 4
450Works just like index except that it
451returns the position of the LAST occurrence of SUBSTR in STR.
452.Ip "rmdir(FILENAME)" 8 4
453.Ip "rmdir FILENAME" 8
454Deletes the directory specified by FILENAME if it is empty.
455If it succeeds it returns 1, otherwise it returns 0 and sets $! (errno).
456If FILENAME is omitted, uses $_.
457.Ip "s/PATTERN/REPLACEMENT/gieo" 8 3
458Searches a string for a pattern, and if found, replaces that pattern with the
459replacement text and returns the number of substitutions made.
460Otherwise it returns false (0).
461The \*(L"g\*(R" is optional, and if present, indicates that all occurrences
462of the pattern are to be replaced.
463The \*(L"i\*(R" is also optional, and if present, indicates that matching
464is to be done in a case-insensitive manner.
465The \*(L"e\*(R" is likewise optional, and if present, indicates that
466the replacement string is to be evaluated as an expression rather than just
467as a double-quoted string.
468Any delimiter may replace the slashes; if single quotes are used, no
469interpretation is done on the replacement string (the e modifier overrides
470this, however).
471If no string is specified via the =~ or !~ operator,
472the $_ string is searched and modified.
473(The string specified with =~ must be a scalar variable, an array element,
474or an assignment to one of those, i.e. an lvalue.)
475If the pattern contains a $ that looks like a variable rather than an
476end-of-string test, the variable will be interpolated into the pattern at
477run-time.
478If you only want the pattern compiled once the first time the variable is
479interpolated, add an \*(L"o\*(R" at the end.
480See also the section on regular expressions.
481Examples:
482.nf
483
484 s/\|\e\|bgreen\e\|b/mauve/g; # don't change wintergreen
485
486 $path \|=~ \|s|\|/usr/bin|\|/usr/local/bin|;
487
488 s/Login: $foo/Login: $bar/; # run-time pattern
489
490 ($foo = $bar) =~ s/bar/foo/;
491
492 $_ = \'abc123xyz\';
493 s/\ed+/$&*2/e; # yields \*(L'abc246xyz\*(R'
494 s/\ed+/sprintf("%5d",$&)/e; # yields \*(L'abc 246xyz\*(R'
495 s/\ew/$& x 2/eg; # yields \*(L'aabbcc 224466xxyyzz\*(R'
496
497 s/\|([^ \|]*\|) *\|([^ \|]*\|)\|/\|$2 $1/; # reverse 1st two fields
498
499.fi
500(Note the use of $ instead of \|\e\| in the last example. See section
501on regular expressions.)
502.Ip "seek(FILEHANDLE,POSITION,WHENCE)" 8 3
503Randomly positions the file pointer for FILEHANDLE, just like the fseek()
504call of stdio.
505FILEHANDLE may be an expression whose value gives the name of the filehandle.
506Returns 1 upon success, 0 otherwise.
507.Ip "seekdir(DIRHANDLE,POS)" 8 3
508Sets the current position for the readdir() routine on DIRHANDLE.
509POS must be a value returned by seekdir().
510Has the same caveats about possible directory compaction as the corresponding
511system library routine.
512.Ip "select(FILEHANDLE)" 8 3
513.Ip "select" 8 3
514Returns the currently selected filehandle.
515Sets the current default filehandle for output, if FILEHANDLE is supplied.
516This has two effects: first, a
517.I write
518or a
519.I print
520without a filehandle will default to this FILEHANDLE.
521Second, references to variables related to output will refer to this output
522channel.
523For example, if you have to set the top of form format for more than
524one output channel, you might do the following:
525.nf
526
527.ne 4
528 select(REPORT1);
529 $^ = \'report1_top\';
530 select(REPORT2);
531 $^ = \'report2_top\';
532
533.fi
534FILEHANDLE may be an expression whose value gives the name of the actual filehandle.
535Thus:
536.nf
537
538 $oldfh = select(STDERR); $| = 1; select($oldfh);
539
540.fi
541.Ip "select(RBITS,WBITS,EBITS,TIMEOUT)" 8 3
542This calls the select system call with the bitmasks specified, which can
543be constructed using fileno() and vec(), along these lines:
544.nf
545
546 $rin = $win = $ein = '';
547 vec($rin,fileno(STDIN),1) = 1;
548 vec($win,fileno(STDOUT),1) = 1;
549 $ein = $rin | $win;
550
551.fi
552If you want to select on many filehandles you might wish to write a subroutine:
553.nf
554
555 sub fhbits {
556 local(@fhlist) = split(' ',$_[0]);
557 local($bits);
558 for (@fhlist) {
559 vec($bits,fileno($_),1) = 1;
560 }
561 $bits;
562 }
563 $rin = &fhbits('STDIN TTY SOCK');
564
565.fi
566The usual idiom is:
567.nf
568
569 ($nfound,$timeleft) =
570 select($rout=$rin, $wout=$win, $eout=$ein, $timeout);
571
572or to block until something becomes ready:
573
ae986130 574.ie t \{\
a687059c 575 $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);
ae986130 576'br\}
577.el \{\
578 $nfound = select($rout=$rin, $wout=$win,
579 $eout=$ein, undef);
580'br\}
a687059c 581
582.fi
583Any of the bitmasks can also be undef.
584The timeout, if specified, is in seconds, which may be fractional.
585.Ip "setpgrp(PID,PGRP)" 8 4
586Sets the current process group for the specified PID, 0 for the current
587process.
588Will produce a fatal error if used on a machine that doesn't implement
589setpgrp(2).
590.Ip "send(SOCKET,MSG,FLAGS,TO)" 8 4
591.Ip "send(SOCKET,MSG,FLAGS)" 8
592Sends a message on a socket.
593Takes the same flags as the system call of the same name.
594On unconnected sockets you must specify a destination to send TO.
595Returns the number of characters sent, or the undefined value if
596there is an error.
597.Ip "setpriority(WHICH,WHO,PRIORITY)" 8 4
598Sets the current priority for a process, a process group, or a user.
599(See setpriority(2).)
600Will produce a fatal error if used on a machine that doesn't implement
601setpriority(2).
602.Ip "setsockopt(SOCKET,LEVEL,OPTNAME,OPTVAL)" 8 3
603Sets the socket option requested.
604Returns undefined if there is an error.
605OPTVAL may be specified as undef if you don't want to pass an argument.
606.Ip "shift(ARRAY)" 8 6
607.Ip "shift ARRAY" 8
608.Ip "shift" 8
609Shifts the first value of the array off and returns it,
610shortening the array by 1 and moving everything down.
611If there are no elements in the array, returns the undefined value.
612If ARRAY is omitted, shifts the @ARGV array in the main program, and the @_
613array in subroutines.
614See also unshift(), push() and pop().
615Shift() and unshift() do the same thing to the left end of an array that push()
616and pop() do to the right end.
617.Ip "shutdown(SOCKET,HOW)" 8 3
618Shuts down a socket connection in the manner indicated by HOW, which has
619the same interpretation as in the system call of the same name.
620.Ip "sin(EXPR)" 8 4
621.Ip "sin EXPR" 8
622Returns the sine of EXPR (expressed in radians).
623If EXPR is omitted, returns sine of $_.
624.Ip "sleep(EXPR)" 8 6
625.Ip "sleep EXPR" 8
626.Ip "sleep" 8
627Causes the script to sleep for EXPR seconds, or forever if no EXPR.
628May be interrupted by sending the process a SIGALARM.
629Returns the number of seconds actually slept.
630.Ip "socket(SOCKET,DOMAIN,TYPE,PROTOCOL)" 8 3
631Opens a socket of the specified kind and attaches it to filehandle SOCKET.
632DOMAIN, TYPE and PROTOCOL are specified the same as for the system call
633of the same name.
634You may need to run makelib on sys/socket.h to get the proper values handy
635in a perl library file.
636Return true if successful.
637See the example in the section on Interprocess Communication.
638.Ip "socketpair(SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL)" 8 3
639Creates an unnamed pair of sockets in the specified domain, of the specified
640type.
641DOMAIN, TYPE and PROTOCOL are specified the same as for the system call
642of the same name.
643If unimplemented, yields a fatal error.
644Return true if successful.
645.Ip "sort(SUBROUTINE LIST)" 8 9
646.Ip "sort(LIST)" 8
647.Ip "sort SUBROUTINE LIST" 8
648.Ip "sort LIST" 8
649Sorts the LIST and returns the sorted array value.
650Nonexistent values of arrays are stripped out.
651If SUBROUTINE is omitted, sorts in standard string comparison order.
652If SUBROUTINE is specified, gives the name of a subroutine that returns
653an integer less than, equal to, or greater than 0,
654depending on how the elements of the array are to be ordered.
655In the interests of efficiency the normal calling code for subroutines
656is bypassed, with the following effects: the subroutine may not be a recursive
657subroutine, and the two elements to be compared are passed into the subroutine
658not via @_ but as $a and $b (see example below).
659They are passed by reference so don't modify $a and $b.
660SUBROUTINE may be a scalar variable name, in which case the value provides
661the name of the subroutine to use.
662Examples:
663.nf
664
665.ne 4
666 sub byage {
667 $age{$a} - $age{$b}; # presuming integers
668 }
669 @sortedclass = sort byage @class;
670
671.ne 9
672 sub reverse { $a lt $b ? 1 : $a gt $b ? \-1 : 0; }
673 @harry = (\'dog\',\'cat\',\'x\',\'Cain\',\'Abel\');
674 @george = (\'gone\',\'chased\',\'yz\',\'Punished\',\'Axed\');
675 print sort @harry;
676 # prints AbelCaincatdogx
677 print sort reverse @harry;
678 # prints xdogcatCainAbel
679 print sort @george, \'to\', @harry;
680 # prints AbelAxedCainPunishedcatchaseddoggonetoxyz
681
682.fi
683.Ip "split(/PATTERN/,EXPR,LIMIT)" 8 8
684.Ip "split(/PATTERN/,EXPR)" 8 8
685.Ip "split(/PATTERN/)" 8
686.Ip "split" 8
687Splits a string into an array of strings, and returns it.
688(If not in an array context, returns the number of fields found and splits
689into the @_ array.)
690If EXPR is omitted, splits the $_ string.
691If PATTERN is also omitted, splits on whitespace (/[\ \et\en]+/).
692Anything matching PATTERN is taken to be a delimiter separating the fields.
693(Note that the delimiter may be longer than one character.)
694If LIMIT is specified, splits into no more than that many fields (though it
695may split into fewer).
696If LIMIT is unspecified, trailing null fields are stripped (which
697potential users of pop() would do well to remember).
698A pattern matching the null string (not to be confused with a null pattern,
699which is one member of the set of patterns matching a null string)
700will split the value of EXPR into separate characters at each point it
701matches that way.
702For example:
703.nf
704
705 print join(\':\', split(/ */, \'hi there\'));
706
707.fi
708produces the output \*(L'h:i:t:h:e:r:e\*(R'.
ffed7fef 709.Sp
a687059c 710The NUM parameter can be used to partially split a line
711.nf
712
713 ($login, $passwd, $remainder) = split(\|/\|:\|/\|, $_, 3);
714
715.fi
716(When assigning to a list, if NUM is omitted, perl supplies a NUM one
717larger than the number of variables in the list, to avoid unnecessary work.
718For the list above NUM would have been 4 by default.
719In time critical applications it behooves you not to split into
720more fields than you really need.)
721.Sp
722If the PATTERN contains parentheses, additional array elements are created
723from each matching substring in the delimiter.
724.Sp
725 split(/([,-])/,"1-10,20");
726.Sp
727produces the array value
728.Sp
729 (1,'-',10,',',20)
730.Sp
731The pattern /PATTERN/ may be replaced with an expression to specify patterns
732that vary at runtime.
733(To do runtime compilation only once, use /$variable/o.)
734As a special case, specifying a space (\'\ \') will split on white space
735just as split with no arguments does, but leading white space does NOT
736produce a null first field.
737Thus, split(\'\ \') can be used to emulate
738.IR awk 's
739default behavior, whereas
740split(/\ /) will give you as many null initial fields as there are
741leading spaces.
742.Sp
743Example:
744.nf
745
746.ne 5
747 open(passwd, \'/etc/passwd\');
748 while (<passwd>) {
749.ie t \{\
750 ($login, $passwd, $uid, $gid, $gcos, $home, $shell) = split(\|/\|:\|/\|);
751'br\}
752.el \{\
753 ($login, $passwd, $uid, $gid, $gcos, $home, $shell)
754 = split(\|/\|:\|/\|);
755'br\}
756 .\|.\|.
757 }
758
759.fi
760(Note that $shell above will still have a newline on it. See chop().)
761See also
762.IR join .
763.Ip "sprintf(FORMAT,LIST)" 8 4
764Returns a string formatted by the usual printf conventions.
765The * character is not supported.
766.Ip "sqrt(EXPR)" 8 4
767.Ip "sqrt EXPR" 8
768Return the square root of EXPR.
769If EXPR is omitted, returns square root of $_.
770.Ip "srand(EXPR)" 8 4
771.Ip "srand EXPR" 8
772Sets the random number seed for the
773.I rand
774operator.
775If EXPR is omitted, does srand(time).
ae986130 776.Ip "stat(FILEHANDLE)" 8 8
a687059c 777.Ip "stat FILEHANDLE" 8
778.Ip "stat(EXPR)" 8
ae986130 779.Ip "stat SCALARVARIABLE" 8
a687059c 780Returns a 13-element array giving the statistics for a file, either the file
781opened via FILEHANDLE, or named by EXPR.
782Typically used as follows:
783.nf
784
785.ne 3
786 ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
787 $atime,$mtime,$ctime,$blksize,$blocks)
788 = stat($filename);
789
790.fi
791If stat is passed the special filehandle consisting of an underline,
792no stat is done, but the current contents of the stat structure from
793the last stat or filetest are returned.
794Example:
795.nf
796
797.ne 3
798 if (-x $file && (($d) = stat(_)) && $d < 0) {
799 print "$file is executable NFS file\en";
800 }
801
802.fi
803.Ip "study(SCALAR)" 8 6
804.Ip "study SCALAR" 8
805.Ip "study"
806Takes extra time to study SCALAR ($_ if unspecified) in anticipation of
807doing many pattern matches on the string before it is next modified.
808This may or may not save time, depending on the nature and number of patterns
809you are searching on, and on the distribution of character frequencies in
810the string to be searched\*(--you probably want to compare runtimes with and
811without it to see which runs faster.
812Those loops which scan for many short constant strings (including the constant
813parts of more complex patterns) will benefit most.
814You may have only one study active at a time\*(--if you study a different
815scalar the first is \*(L"unstudied\*(R".
816(The way study works is this: a linked list of every character in the string
817to be searched is made, so we know, for example, where all the \*(L'k\*(R' characters
818are.
819From each search string, the rarest character is selected, based on some
820static frequency tables constructed from some C programs and English text.
821Only those places that contain this \*(L"rarest\*(R" character are examined.)
822.Sp
823For example, here is a loop which inserts index producing entries before any line
824containing a certain pattern:
825.nf
826
827.ne 8
828 while (<>) {
829 study;
830 print ".IX foo\en" if /\ebfoo\eb/;
831 print ".IX bar\en" if /\ebbar\eb/;
832 print ".IX blurfl\en" if /\ebblurfl\eb/;
833 .\|.\|.
834 print;
835 }
836
837.fi
838In searching for /\ebfoo\eb/, only those locations in $_ that contain \*(L'f\*(R'
839will be looked at, because \*(L'f\*(R' is rarer than \*(L'o\*(R'.
840In general, this is a big win except in pathological cases.
841The only question is whether it saves you more time than it took to build
842the linked list in the first place.
843.Sp
844Note that if you have to look for strings that you don't know till runtime,
845you can build an entire loop as a string and eval that to avoid recompiling
846all your patterns all the time.
847Together with setting $/ to input entire files as one record, this can
848be very fast, often faster than specialized programs like fgrep.
849The following scans a list of files (@files)
850for a list of words (@words), and prints out the names of those files that
851contain a match:
852.nf
853
854.ne 12
855 $search = \'while (<>) { study;\';
856 foreach $word (@words) {
857 $search .= "++\e$seen{\e$ARGV} if /\eb$word\eb/;\en";
858 }
859 $search .= "}";
860 @ARGV = @files;
861 $/ = "\e177"; # something that doesn't occur
862 eval $search; # this screams
863 $/ = "\en"; # put back to normal input delim
864 foreach $file (sort keys(%seen)) {
865 print $file, "\en";
866 }
867
868.fi
869.Ip "substr(EXPR,OFFSET,LEN)" 8 2
870Extracts a substring out of EXPR and returns it.
871First character is at offset 0, or whatever you've set $[ to.
872If OFFSET is negative, starts that far from the end of the string.
873You can use the substr() function as an lvalue, in which case EXPR must
874be an lvalue.
875If you assign something shorter than LEN, the string will shrink, and
ae986130 876if you assign something longer than LEN, the string will grow to accommodate it.
a687059c 877To keep the string the same length you may need to pad or chop your value using
878sprintf().
879.Ip "syscall(LIST)" 8 6
880.Ip "syscall LIST" 8
881Calls the system call specified as the first element of the list, passing
882the remaining elements as arguments to the system call.
883If unimplemented, produces a fatal error.
884The arguments are interpreted as follows: if a given argument is numeric,
885the argument is passed as an int.
886If not, the pointer to the string value is passed.
887You are responsible to make sure a string is pre-extended long enough
888to receive any result that might be written into a string.
889If your integer arguments are not literals and have never been interpreted
890in a numeric context, you may need to add 0 to them to force them to look
891like numbers.
892.nf
893
894 do 'syscall.h'; # may need to run makelib
895 syscall(&SYS_write, fileno(STDOUT), "hi there\en", 9);
896
897.fi
898.Ip "system(LIST)" 8 6
899.Ip "system LIST" 8
900Does exactly the same thing as \*(L"exec LIST\*(R" except that a fork
901is done first, and the parent process waits for the child process to complete.
902Note that argument processing varies depending on the number of arguments.
903The return value is the exit status of the program as returned by the wait()
904call.
905To get the actual exit value divide by 256.
906See also
907.IR exec .
908.Ip "symlink(OLDFILE,NEWFILE)" 8 2
909Creates a new filename symbolically linked to the old filename.
910Returns 1 for success, 0 otherwise.
911On systems that don't support symbolic links, produces a fatal error at
912run time.
913To check for that, use eval:
914.nf
915
916 $symlink_exists = (eval \'symlink("","");\', $@ eq \'\');
917
918.fi
919.Ip "tell(FILEHANDLE)" 8 6
920.Ip "tell FILEHANDLE" 8 6
921.Ip "tell" 8
922Returns the current file position for FILEHANDLE.
923FILEHANDLE may be an expression whose value gives the name of the actual
924filehandle.
925If FILEHANDLE is omitted, assumes the file last read.
926.Ip "telldir(DIRHANDLE)" 8 5
927.Ip "telldir DIRHANDLE" 8
928Returns the current position of the readdir() routines on DIRHANDLE.
929Value may be given to seekdir() to access a particular location in
930a directory.
931Has the same caveats about possible directory compaction as the corresponding
932system library routine.
933.Ip "time" 8 4
934Returns the number of non-leap seconds since January 1, 1970, UTC.
935Suitable for feeding to gmtime() and localtime().
936.Ip "times" 8 4
937Returns a four-element array giving the user and system times, in seconds, for this
938process and the children of this process.
939.Sp
940 ($user,$system,$cuser,$csystem) = times;
941.Sp
942.Ip "tr/SEARCHLIST/REPLACEMENTLIST/" 8 5
943.Ip "y/SEARCHLIST/REPLACEMENTLIST/" 8
944Translates all occurrences of the characters found in the search list with
945the corresponding character in the replacement list.
946It returns the number of characters replaced.
947If no string is specified via the =~ or !~ operator,
948the $_ string is translated.
949(The string specified with =~ must be a scalar variable, an array element,
950or an assignment to one of those, i.e. an lvalue.)
951For
952.I sed
953devotees,
954.I y
955is provided as a synonym for
956.IR tr .
957Examples:
958.nf
959
960 $ARGV[1] \|=~ \|y/A\-Z/a\-z/; \h'|3i'# canonicalize to lower case
961
962 $cnt = tr/*/*/; \h'|3i'# count the stars in $_
963
964 ($HOST = $host) =~ tr/a\-z/A\-Z/;
965
966 y/\e001\-@[\-_{\-\e177/ /; \h'|3i'# change non-alphas to space
967
968.fi
969.Ip "umask(EXPR)" 8 4
970.Ip "umask EXPR" 8
ae986130 971.Ip "umask" 8
a687059c 972Sets the umask for the process and returns the old one.
973If EXPR is omitted, merely returns current umask.
974.Ip "undef(EXPR)" 8 6
975.Ip "undef EXPR" 8
976.Ip "undef" 8
977Undefines the value of EXPR, which must be an lvalue.
978Use only on a scalar value, an entire array, or a subroutine name (using &).
979(Undef will probably not do what you expect on most predefined variables or
980dbm array values.)
981Always returns the undefined value.
982You can omit the EXPR, in which case nothing is undefined, but you still
983get an undefined value that you could, for instance, return from a subroutine.
984Examples:
985.nf
986
987.ne 6
988 undef $foo;
989 undef $bar{'blurfl'};
990 undef @ary;
991 undef %assoc;
992 undef &mysub;
993 return (wantarray ? () : undef) if $they_blew_it;
994
995.fi
996.Ip "unlink(LIST)" 8 4
997.Ip "unlink LIST" 8
998Deletes a list of files.
999Returns the number of files successfully deleted.
1000.nf
1001
1002.ne 2
1003 $cnt = unlink \'a\', \'b\', \'c\';
1004 unlink @goners;
1005 unlink <*.bak>;
1006
1007.fi
1008Note: unlink will not delete directories unless you are superuser and the
1009.B \-U
1010flag is supplied to
1011.IR perl .
1012Even if these conditions are met, be warned that unlinking a directory
1013can inflict damage on your filesystem.
1014Use rmdir instead.
1015.Ip "unpack(TEMPLATE,EXPR)" 8 4
1016Unpack does the reverse of pack: it takes a string representing
1017a structure and expands it out into an array value, returning the array
1018value.
1019The TEMPLATE has the same format as in the pack function.
1020Here's a subroutine that does substring:
1021.nf
1022
1023.ne 4
1024 sub substr {
1025 local($what,$where,$howmuch) = @_;
1026 unpack("x$where a$howmuch", $what);
1027 }
1028
1029.ne 3
1030and then there's
1031
1032 sub ord { unpack("c",$_[0]); }
1033
1034.fi
1035.Ip "unshift(ARRAY,LIST)" 8 4
1036Does the opposite of a
1037.IR shift .
1038Or the opposite of a
1039.IR push ,
1040depending on how you look at it.
1041Prepends list to the front of the array, and returns the number of elements
1042in the new array.
1043.nf
1044
1045 unshift(ARGV, \'\-e\') unless $ARGV[0] =~ /^\-/;
1046
1047.fi
1048.Ip "utime(LIST)" 8 2
1049.Ip "utime LIST" 8 2
1050Changes the access and modification times on each file of a list of files.
1051The first two elements of the list must be the NUMERICAL access and
1052modification times, in that order.
1053Returns the number of files successfully changed.
1054The inode modification time of each file is set to the current time.
1055Example of a \*(L"touch\*(R" command:
1056.nf
1057
1058.ne 3
1059 #!/usr/bin/perl
1060 $now = time;
1061 utime $now, $now, @ARGV;
1062
1063.fi
1064.Ip "values(ASSOC_ARRAY)" 8 6
1065.Ip "values ASSOC_ARRAY" 8
1066Returns a normal array consisting of all the values of the named associative
1067array.
1068The values are returned in an apparently random order, but it is the same order
1069as either the keys() or each() function would produce on the same array.
1070See also keys() and each().
1071.Ip "vec(EXPR,OFFSET,BITS)" 8 2
1072Treats a string as a vector of unsigned integers, and returns the value
1073of the bitfield specified.
1074May also be assigned to.
1075BITS must be a power of two from 1 to 32.
1076.Sp
1077Vectors created with vec() can also be manipulated with the logical operators
1078|, & and ^,
1079which will assume a bit vector operation is desired when both operands are
1080strings.
1081This interpretation is not enabled unless there is at least one vec() in
1082your program, to protect older programs.
1083.Ip "wait" 8 6
1084Waits for a child process to terminate and returns the pid of the deceased
ae986130 1085process, or -1 if there are no child processes.
a687059c 1086The status is returned in $?.
ae986130 1087If you expected a child and didn't find it, you probably had a call to
1088system, a close on a pipe, or backticks between the fork and the wait.
1089These constructs also do a wait and may have harvested your child process.
a687059c 1090.Ip "wantarray" 8 4
1091Returns true if the context of the currently executing subroutine
1092is looking for an array value.
1093Returns false if the context is looking for a scalar.
1094.nf
1095
1096 return wantarray ? () : undef;
1097
1098.fi
1099.Ip "warn(LIST)" 8 4
1100.Ip "warn LIST" 8
1101Produces a message on STDERR just like \*(L"die\*(R", but doesn't exit.
1102.Ip "write(FILEHANDLE)" 8 6
1103.Ip "write(EXPR)" 8
ae986130 1104.Ip "write" 8
a687059c 1105Writes a formatted record (possibly multi-line) to the specified file,
1106using the format associated with that file.
1107By default the format for a file is the one having the same name is the
1108filehandle, but the format for the current output channel (see
1109.IR select )
1110may be set explicitly
1111by assigning the name of the format to the $~ variable.
1112.Sp
1113Top of form processing is handled automatically:
1114if there is insufficient room on the current page for the formatted
1115record, the page is advanced, a special top-of-page format is used
1116to format the new page header, and then the record is written.
1117By default the top-of-page format is \*(L"top\*(R", but it
1118may be set to the
1119format of your choice by assigning the name to the $^ variable.
1120.Sp
1121If FILEHANDLE is unspecified, output goes to the current default output channel,
1122which starts out as
1123.I STDOUT
1124but may be changed by the
1125.I select
1126operator.
1127If the FILEHANDLE is an EXPR, then the expression is evaluated and the
1128resulting string is used to look up the name of the FILEHANDLE at run time.
1129For more on formats, see the section on formats later on.
1130.Sp
1131Note that write is NOT the opposite of read.