diff options
Diffstat (limited to 'tests/lexers/groff/example.txt')
| -rw-r--r-- | tests/lexers/groff/example.txt | 9306 |
1 files changed, 9306 insertions, 0 deletions
diff --git a/tests/lexers/groff/example.txt b/tests/lexers/groff/example.txt new file mode 100644 index 00000000..245b3878 --- /dev/null +++ b/tests/lexers/groff/example.txt @@ -0,0 +1,9306 @@ +---input--- +.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sh \" Subsection heading +.br +.if t .Sp +.ne 5 +.PP +\fB\\$1\fR +.PP +.. +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. | will give a +.\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to +.\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' +.\" expand to `' in nroff, nothing in troff, for use with C<>. +.tr \(*W-|\(bv\*(Tr +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.if \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.\" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.hy 0 +.if n .na +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "PERLFUNC 1" +.TH PERLFUNC 1 "2006-01-07" "perl v5.8.8" "Perl Programmers Reference Guide" +.SH "NAME" +.IX Xref "function" +perlfunc \- Perl builtin functions +.SH "DESCRIPTION" +.IX Header "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 perlop.) 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, \fIsplice()\fR has three scalar +arguments followed by a list, whereas \fIgethostbyname()\fR has four scalar +arguments. +.PP +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 \s-1LIST\s0 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. +Commas should separate elements of the \s-1LIST\s0. +.PP +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 \fIlooks\fR like a function, therefore it \fIis\fR 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: +.PP +.Vb 5 +\& 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. +.Ve +.PP +If you run Perl with the \fB\-w\fR switch it can warn you about this. For +example, the third line above produces: +.PP +.Vb 2 +\& print (...) interpreted as function at - line 1. +\& Useless use of integer addition in void context at - line 1. +.Ve +.PP +A few functions take no arguments at all, and therefore work as neither +unary nor list operators. These include such functions as \f(CW\*(C`time\*(C'\fR +and \f(CW\*(C`endpwent\*(C'\fR. For example, \f(CW\*(C`time+86_400\*(C'\fR always means +\&\f(CW\*(C`time() + 86_400\*(C'\fR. +.PP +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. +.PP +Remember the following important rule: There is \fBno rule\fR 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. +.IX Xref "context" +.PP +A 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 \f(CW\*(C`(1,2,3)\*(C'\fR 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. +.PP +In general, functions in Perl that serve as wrappers for system calls +of the same name (like \fIchown\fR\|(2), \fIfork\fR\|(2), \fIclosedir\fR\|(2), etc.) all return +true when they succeed and \f(CW\*(C`undef\*(C'\fR otherwise, as is usually mentioned +in the descriptions below. This is different from the C interfaces, +which return \f(CW\*(C`\-1\*(C'\fR on failure. Exceptions to this rule are \f(CW\*(C`wait\*(C'\fR, +\&\f(CW\*(C`waitpid\*(C'\fR, and \f(CW\*(C`syscall\*(C'\fR. System calls also set the special \f(CW$!\fR +variable on failure. Other functions do not, except accidentally. +.Sh "Perl Functions by Category" +.IX Xref "function" +.IX Subsection "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. +.IP "Functions for SCALARs or strings" 4 +.IX Xref "scalar string character" +.IX Item "Functions for SCALARs or strings" +\&\f(CW\*(C`chomp\*(C'\fR, \f(CW\*(C`chop\*(C'\fR, \f(CW\*(C`chr\*(C'\fR, \f(CW\*(C`crypt\*(C'\fR, \f(CW\*(C`hex\*(C'\fR, \f(CW\*(C`index\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, +\&\f(CW\*(C`length\*(C'\fR, \f(CW\*(C`oct\*(C'\fR, \f(CW\*(C`ord\*(C'\fR, \f(CW\*(C`pack\*(C'\fR, \f(CW\*(C`q/STRING/\*(C'\fR, \f(CW\*(C`qq/STRING/\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR, +\&\f(CW\*(C`rindex\*(C'\fR, \f(CW\*(C`sprintf\*(C'\fR, \f(CW\*(C`substr\*(C'\fR, \f(CW\*(C`tr///\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`y///\*(C'\fR +.IP "Regular expressions and pattern matching" 4 +.IX Xref "regular expression regex regexp" +.IX Item "Regular expressions and pattern matching" +\&\f(CW\*(C`m//\*(C'\fR, \f(CW\*(C`pos\*(C'\fR, \f(CW\*(C`quotemeta\*(C'\fR, \f(CW\*(C`s///\*(C'\fR, \f(CW\*(C`split\*(C'\fR, \f(CW\*(C`study\*(C'\fR, \f(CW\*(C`qr//\*(C'\fR +.IP "Numeric functions" 4 +.IX Xref "numeric number trigonometric trigonometry" +.IX Item "Numeric functions" +\&\f(CW\*(C`abs\*(C'\fR, \f(CW\*(C`atan2\*(C'\fR, \f(CW\*(C`cos\*(C'\fR, \f(CW\*(C`exp\*(C'\fR, \f(CW\*(C`hex\*(C'\fR, \f(CW\*(C`int\*(C'\fR, \f(CW\*(C`log\*(C'\fR, \f(CW\*(C`oct\*(C'\fR, \f(CW\*(C`rand\*(C'\fR, +\&\f(CW\*(C`sin\*(C'\fR, \f(CW\*(C`sqrt\*(C'\fR, \f(CW\*(C`srand\*(C'\fR +.ie n .IP "Functions for real @ARRAYs" 4 +.el .IP "Functions for real \f(CW@ARRAYs\fR" 4 +.IX Xref "array" +.IX Item "Functions for real @ARRAYs" +\&\f(CW\*(C`pop\*(C'\fR, \f(CW\*(C`push\*(C'\fR, \f(CW\*(C`shift\*(C'\fR, \f(CW\*(C`splice\*(C'\fR, \f(CW\*(C`unshift\*(C'\fR +.IP "Functions for list data" 4 +.IX Xref "list" +.IX Item "Functions for list data" +\&\f(CW\*(C`grep\*(C'\fR, \f(CW\*(C`join\*(C'\fR, \f(CW\*(C`map\*(C'\fR, \f(CW\*(C`qw/STRING/\*(C'\fR, \f(CW\*(C`reverse\*(C'\fR, \f(CW\*(C`sort\*(C'\fR, \f(CW\*(C`unpack\*(C'\fR +.ie n .IP "Functions for real %HASHes" 4 +.el .IP "Functions for real \f(CW%HASHes\fR" 4 +.IX Xref "hash" +.IX Item "Functions for real %HASHes" +\&\f(CW\*(C`delete\*(C'\fR, \f(CW\*(C`each\*(C'\fR, \f(CW\*(C`exists\*(C'\fR, \f(CW\*(C`keys\*(C'\fR, \f(CW\*(C`values\*(C'\fR +.IP "Input and output functions" 4 +.IX Xref "I O input output dbm" +.IX Item "Input and output functions" +\&\f(CW\*(C`binmode\*(C'\fR, \f(CW\*(C`close\*(C'\fR, \f(CW\*(C`closedir\*(C'\fR, \f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`die\*(C'\fR, \f(CW\*(C`eof\*(C'\fR, +\&\f(CW\*(C`fileno\*(C'\fR, \f(CW\*(C`flock\*(C'\fR, \f(CW\*(C`format\*(C'\fR, \f(CW\*(C`getc\*(C'\fR, \f(CW\*(C`print\*(C'\fR, \f(CW\*(C`printf\*(C'\fR, \f(CW\*(C`read\*(C'\fR, +\&\f(CW\*(C`readdir\*(C'\fR, \f(CW\*(C`rewinddir\*(C'\fR, \f(CW\*(C`seek\*(C'\fR, \f(CW\*(C`seekdir\*(C'\fR, \f(CW\*(C`select\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, +\&\f(CW\*(C`sysread\*(C'\fR, \f(CW\*(C`sysseek\*(C'\fR, \f(CW\*(C`syswrite\*(C'\fR, \f(CW\*(C`tell\*(C'\fR, \f(CW\*(C`telldir\*(C'\fR, \f(CW\*(C`truncate\*(C'\fR, +\&\f(CW\*(C`warn\*(C'\fR, \f(CW\*(C`write\*(C'\fR +.IP "Functions for fixed length data or records" 4 +.IX Item "Functions for fixed length data or records" +\&\f(CW\*(C`pack\*(C'\fR, \f(CW\*(C`read\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, \f(CW\*(C`sysread\*(C'\fR, \f(CW\*(C`syswrite\*(C'\fR, \f(CW\*(C`unpack\*(C'\fR, \f(CW\*(C`vec\*(C'\fR +.IP "Functions for filehandles, files, or directories" 4 +.IX Xref "file filehandle directory pipe link symlink" +.IX Item "Functions for filehandles, files, or directories" +\&\f(CW\*(C`\-\f(CIX\f(CW\*(C'\fR, \f(CW\*(C`chdir\*(C'\fR, \f(CW\*(C`chmod\*(C'\fR, \f(CW\*(C`chown\*(C'\fR, \f(CW\*(C`chroot\*(C'\fR, \f(CW\*(C`fcntl\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, +\&\f(CW\*(C`ioctl\*(C'\fR, \f(CW\*(C`link\*(C'\fR, \f(CW\*(C`lstat\*(C'\fR, \f(CW\*(C`mkdir\*(C'\fR, \f(CW\*(C`open\*(C'\fR, \f(CW\*(C`opendir\*(C'\fR, +\&\f(CW\*(C`readlink\*(C'\fR, \f(CW\*(C`rename\*(C'\fR, \f(CW\*(C`rmdir\*(C'\fR, \f(CW\*(C`stat\*(C'\fR, \f(CW\*(C`symlink\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, +\&\f(CW\*(C`umask\*(C'\fR, \f(CW\*(C`unlink\*(C'\fR, \f(CW\*(C`utime\*(C'\fR +.IP "Keywords related to the control flow of your Perl program" 4 +.IX Xref "control flow" +.IX Item "Keywords related to the control flow of your Perl program" +\&\f(CW\*(C`caller\*(C'\fR, \f(CW\*(C`continue\*(C'\fR, \f(CW\*(C`die\*(C'\fR, \f(CW\*(C`do\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`eval\*(C'\fR, \f(CW\*(C`exit\*(C'\fR, +\&\f(CW\*(C`goto\*(C'\fR, \f(CW\*(C`last\*(C'\fR, \f(CW\*(C`next\*(C'\fR, \f(CW\*(C`redo\*(C'\fR, \f(CW\*(C`return\*(C'\fR, \f(CW\*(C`sub\*(C'\fR, \f(CW\*(C`wantarray\*(C'\fR +.IP "Keywords related to scoping" 4 +.IX Item "Keywords related to scoping" +\&\f(CW\*(C`caller\*(C'\fR, \f(CW\*(C`import\*(C'\fR, \f(CW\*(C`local\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`use\*(C'\fR +.IP "Miscellaneous functions" 4 +.IX Item "Miscellaneous functions" +\&\f(CW\*(C`defined\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`eval\*(C'\fR, \f(CW\*(C`formline\*(C'\fR, \f(CW\*(C`local\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`reset\*(C'\fR, +\&\f(CW\*(C`scalar\*(C'\fR, \f(CW\*(C`undef\*(C'\fR, \f(CW\*(C`wantarray\*(C'\fR +.IP "Functions for processes and process groups" 4 +.IX Xref "process pid process id" +.IX Item "Functions for processes and process groups" +\&\f(CW\*(C`alarm\*(C'\fR, \f(CW\*(C`exec\*(C'\fR, \f(CW\*(C`fork\*(C'\fR, \f(CW\*(C`getpgrp\*(C'\fR, \f(CW\*(C`getppid\*(C'\fR, \f(CW\*(C`getpriority\*(C'\fR, \f(CW\*(C`kill\*(C'\fR, +\&\f(CW\*(C`pipe\*(C'\fR, \f(CW\*(C`qx/STRING/\*(C'\fR, \f(CW\*(C`setpgrp\*(C'\fR, \f(CW\*(C`setpriority\*(C'\fR, \f(CW\*(C`sleep\*(C'\fR, \f(CW\*(C`system\*(C'\fR, +\&\f(CW\*(C`times\*(C'\fR, \f(CW\*(C`wait\*(C'\fR, \f(CW\*(C`waitpid\*(C'\fR +.IP "Keywords related to perl modules" 4 +.IX Xref "module" +.IX Item "Keywords related to perl modules" +\&\f(CW\*(C`do\*(C'\fR, \f(CW\*(C`import\*(C'\fR, \f(CW\*(C`no\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`require\*(C'\fR, \f(CW\*(C`use\*(C'\fR +.IP "Keywords related to classes and object-orientedness" 4 +.IX Xref "object class package" +.IX Item "Keywords related to classes and object-orientedness" +\&\f(CW\*(C`bless\*(C'\fR, \f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`package\*(C'\fR, \f(CW\*(C`ref\*(C'\fR, \f(CW\*(C`tie\*(C'\fR, \f(CW\*(C`tied\*(C'\fR, +\&\f(CW\*(C`untie\*(C'\fR, \f(CW\*(C`use\*(C'\fR +.IP "Low-level socket functions" 4 +.IX Xref "socket sock" +.IX Item "Low-level socket functions" +\&\f(CW\*(C`accept\*(C'\fR, \f(CW\*(C`bind\*(C'\fR, \f(CW\*(C`connect\*(C'\fR, \f(CW\*(C`getpeername\*(C'\fR, \f(CW\*(C`getsockname\*(C'\fR, +\&\f(CW\*(C`getsockopt\*(C'\fR, \f(CW\*(C`listen\*(C'\fR, \f(CW\*(C`recv\*(C'\fR, \f(CW\*(C`send\*(C'\fR, \f(CW\*(C`setsockopt\*(C'\fR, \f(CW\*(C`shutdown\*(C'\fR, +\&\f(CW\*(C`socket\*(C'\fR, \f(CW\*(C`socketpair\*(C'\fR +.IP "System V interprocess communication functions" 4 +.IX Xref "IPC System V semaphore shared memory memory message" +.IX Item "System V interprocess communication functions" +\&\f(CW\*(C`msgctl\*(C'\fR, \f(CW\*(C`msgget\*(C'\fR, \f(CW\*(C`msgrcv\*(C'\fR, \f(CW\*(C`msgsnd\*(C'\fR, \f(CW\*(C`semctl\*(C'\fR, \f(CW\*(C`semget\*(C'\fR, \f(CW\*(C`semop\*(C'\fR, +\&\f(CW\*(C`shmctl\*(C'\fR, \f(CW\*(C`shmget\*(C'\fR, \f(CW\*(C`shmread\*(C'\fR, \f(CW\*(C`shmwrite\*(C'\fR +.IP "Fetching user and group info" 4 +.IX Xref "user group password uid gid passwd etc passwd" +.IX Item "Fetching user and group info" +\&\f(CW\*(C`endgrent\*(C'\fR, \f(CW\*(C`endhostent\*(C'\fR, \f(CW\*(C`endnetent\*(C'\fR, \f(CW\*(C`endpwent\*(C'\fR, \f(CW\*(C`getgrent\*(C'\fR, +\&\f(CW\*(C`getgrgid\*(C'\fR, \f(CW\*(C`getgrnam\*(C'\fR, \f(CW\*(C`getlogin\*(C'\fR, \f(CW\*(C`getpwent\*(C'\fR, \f(CW\*(C`getpwnam\*(C'\fR, +\&\f(CW\*(C`getpwuid\*(C'\fR, \f(CW\*(C`setgrent\*(C'\fR, \f(CW\*(C`setpwent\*(C'\fR +.IP "Fetching network info" 4 +.IX Xref "network protocol host hostname IP address service" +.IX Item "Fetching network info" +\&\f(CW\*(C`endprotoent\*(C'\fR, \f(CW\*(C`endservent\*(C'\fR, \f(CW\*(C`gethostbyaddr\*(C'\fR, \f(CW\*(C`gethostbyname\*(C'\fR, +\&\f(CW\*(C`gethostent\*(C'\fR, \f(CW\*(C`getnetbyaddr\*(C'\fR, \f(CW\*(C`getnetbyname\*(C'\fR, \f(CW\*(C`getnetent\*(C'\fR, +\&\f(CW\*(C`getprotobyname\*(C'\fR, \f(CW\*(C`getprotobynumber\*(C'\fR, \f(CW\*(C`getprotoent\*(C'\fR, +\&\f(CW\*(C`getservbyname\*(C'\fR, \f(CW\*(C`getservbyport\*(C'\fR, \f(CW\*(C`getservent\*(C'\fR, \f(CW\*(C`sethostent\*(C'\fR, +\&\f(CW\*(C`setnetent\*(C'\fR, \f(CW\*(C`setprotoent\*(C'\fR, \f(CW\*(C`setservent\*(C'\fR +.IP "Time-related functions" 4 +.IX Xref "time date" +.IX Item "Time-related functions" +\&\f(CW\*(C`gmtime\*(C'\fR, \f(CW\*(C`localtime\*(C'\fR, \f(CW\*(C`time\*(C'\fR, \f(CW\*(C`times\*(C'\fR +.IP "Functions new in perl5" 4 +.IX Xref "perl5" +.IX Item "Functions new in perl5" +\&\f(CW\*(C`abs\*(C'\fR, \f(CW\*(C`bless\*(C'\fR, \f(CW\*(C`chomp\*(C'\fR, \f(CW\*(C`chr\*(C'\fR, \f(CW\*(C`exists\*(C'\fR, \f(CW\*(C`formline\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, +\&\f(CW\*(C`import\*(C'\fR, \f(CW\*(C`lc\*(C'\fR, \f(CW\*(C`lcfirst\*(C'\fR, \f(CW\*(C`map\*(C'\fR, \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`no\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`prototype\*(C'\fR, +\&\f(CW\*(C`qx\*(C'\fR, \f(CW\*(C`qw\*(C'\fR, \f(CW\*(C`readline\*(C'\fR, \f(CW\*(C`readpipe\*(C'\fR, \f(CW\*(C`ref\*(C'\fR, \f(CW\*(C`sub*\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, \f(CW\*(C`tie\*(C'\fR, +\&\f(CW\*(C`tied\*(C'\fR, \f(CW\*(C`uc\*(C'\fR, \f(CW\*(C`ucfirst\*(C'\fR, \f(CW\*(C`untie\*(C'\fR, \f(CW\*(C`use\*(C'\fR +.Sp +* \- \f(CW\*(C`sub\*(C'\fR was a keyword in perl4, but in perl5 it is an +operator, which can be used in expressions. +.IP "Functions obsoleted in perl5" 4 +.IX Item "Functions obsoleted in perl5" +\&\f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR +.Sh "Portability" +.IX Xref "portability Unix portable" +.IX Subsection "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: +.PP +\&\f(CW\*(C`\-X\*(C'\fR, \f(CW\*(C`binmode\*(C'\fR, \f(CW\*(C`chmod\*(C'\fR, \f(CW\*(C`chown\*(C'\fR, \f(CW\*(C`chroot\*(C'\fR, \f(CW\*(C`crypt\*(C'\fR, +\&\f(CW\*(C`dbmclose\*(C'\fR, \f(CW\*(C`dbmopen\*(C'\fR, \f(CW\*(C`dump\*(C'\fR, \f(CW\*(C`endgrent\*(C'\fR, \f(CW\*(C`endhostent\*(C'\fR, +\&\f(CW\*(C`endnetent\*(C'\fR, \f(CW\*(C`endprotoent\*(C'\fR, \f(CW\*(C`endpwent\*(C'\fR, \f(CW\*(C`endservent\*(C'\fR, \f(CW\*(C`exec\*(C'\fR, +\&\f(CW\*(C`fcntl\*(C'\fR, \f(CW\*(C`flock\*(C'\fR, \f(CW\*(C`fork\*(C'\fR, \f(CW\*(C`getgrent\*(C'\fR, \f(CW\*(C`getgrgid\*(C'\fR, \f(CW\*(C`gethostbyname\*(C'\fR, +\&\f(CW\*(C`gethostent\*(C'\fR, \f(CW\*(C`getlogin\*(C'\fR, \f(CW\*(C`getnetbyaddr\*(C'\fR, \f(CW\*(C`getnetbyname\*(C'\fR, \f(CW\*(C`getnetent\*(C'\fR, +\&\f(CW\*(C`getppid\*(C'\fR, \f(CW\*(C`getpgrp\*(C'\fR, \f(CW\*(C`getpriority\*(C'\fR, \f(CW\*(C`getprotobynumber\*(C'\fR, +\&\f(CW\*(C`getprotoent\*(C'\fR, \f(CW\*(C`getpwent\*(C'\fR, \f(CW\*(C`getpwnam\*(C'\fR, \f(CW\*(C`getpwuid\*(C'\fR, +\&\f(CW\*(C`getservbyport\*(C'\fR, \f(CW\*(C`getservent\*(C'\fR, \f(CW\*(C`getsockopt\*(C'\fR, \f(CW\*(C`glob\*(C'\fR, \f(CW\*(C`ioctl\*(C'\fR, +\&\f(CW\*(C`kill\*(C'\fR, \f(CW\*(C`link\*(C'\fR, \f(CW\*(C`lstat\*(C'\fR, \f(CW\*(C`msgctl\*(C'\fR, \f(CW\*(C`msgget\*(C'\fR, \f(CW\*(C`msgrcv\*(C'\fR, +\&\f(CW\*(C`msgsnd\*(C'\fR, \f(CW\*(C`open\*(C'\fR, \f(CW\*(C`pipe\*(C'\fR, \f(CW\*(C`readlink\*(C'\fR, \f(CW\*(C`rename\*(C'\fR, \f(CW\*(C`select\*(C'\fR, \f(CW\*(C`semctl\*(C'\fR, +\&\f(CW\*(C`semget\*(C'\fR, \f(CW\*(C`semop\*(C'\fR, \f(CW\*(C`setgrent\*(C'\fR, \f(CW\*(C`sethostent\*(C'\fR, \f(CW\*(C`setnetent\*(C'\fR, +\&\f(CW\*(C`setpgrp\*(C'\fR, \f(CW\*(C`setpriority\*(C'\fR, \f(CW\*(C`setprotoent\*(C'\fR, \f(CW\*(C`setpwent\*(C'\fR, +\&\f(CW\*(C`setservent\*(C'\fR, \f(CW\*(C`setsockopt\*(C'\fR, \f(CW\*(C`shmctl\*(C'\fR, \f(CW\*(C`shmget\*(C'\fR, \f(CW\*(C`shmread\*(C'\fR, +\&\f(CW\*(C`shmwrite\*(C'\fR, \f(CW\*(C`socket\*(C'\fR, \f(CW\*(C`socketpair\*(C'\fR, +\&\f(CW\*(C`stat\*(C'\fR, \f(CW\*(C`symlink\*(C'\fR, \f(CW\*(C`syscall\*(C'\fR, \f(CW\*(C`sysopen\*(C'\fR, \f(CW\*(C`system\*(C'\fR, +\&\f(CW\*(C`times\*(C'\fR, \f(CW\*(C`truncate\*(C'\fR, \f(CW\*(C`umask\*(C'\fR, \f(CW\*(C`unlink\*(C'\fR, +\&\f(CW\*(C`utime\*(C'\fR, \f(CW\*(C`wait\*(C'\fR, \f(CW\*(C`waitpid\*(C'\fR +.PP +For more information about the portability of these functions, see +perlport and other available platform-specific documentation. +.Sh "Alphabetical Listing of Perl Functions" +.IX Subsection "Alphabetical Listing of Perl Functions" +.IP "\-X \s-1FILEHANDLE\s0" 8 +.IX Xref "-r -w -x -o -R -W -X -O -e -z -s -f -d -l -p -S -b -c -t -u -g -k -T -B -M -A -C" +.IX Item "-X FILEHANDLE" +.PD 0 +.IP "\-X \s-1EXPR\s0" 8 +.IX Item "-X EXPR" +.IP "\-X" 8 +.IX Item "-X" +.PD +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 \f(CW$_\fR, except for \f(CW\*(C`\-t\*(C'\fR, which tests \s-1STDIN\s0. +Unless otherwise documented, it returns \f(CW1\fR for true and \f(CW''\fR 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: +.Sp +.Vb 4 +\& -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. +.Ve +.Sp +.Vb 4 +\& -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. +.Ve +.Sp +.Vb 3 +\& -e File exists. +\& -z File has zero size (is empty). +\& -s File has nonzero size (returns size in bytes). +.Ve +.Sp +.Vb 8 +\& -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. +.Ve +.Sp +.Vb 3 +\& -u File has setuid bit set. +\& -g File has setgid bit set. +\& -k File has sticky bit set. +.Ve +.Sp +.Vb 2 +\& -T File is an ASCII text file (heuristic guess). +\& -B File is a "binary" file (opposite of -T). +.Ve +.Sp +.Vb 3 +\& -M Script start time minus file modification time, in days. +\& -A Same for access time. +\& -C Same for inode change time (Unix, may differ for other platforms) +.Ve +.Sp +Example: +.Sp +.Vb 5 +\& while (<>) { +\& chomp; +\& next unless -f $_; # ignore specials +\& #... +\& } +.Ve +.Sp +The interpretation of the file permission operators \f(CW\*(C`\-r\*(C'\fR, \f(CW\*(C`\-R\*(C'\fR, +\&\f(CW\*(C`\-w\*(C'\fR, \f(CW\*(C`\-W\*(C'\fR, \f(CW\*(C`\-x\*(C'\fR, and \f(CW\*(C`\-X\*(C'\fR 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. +.Sp +Also note that, for the superuser on the local filesystems, the \f(CW\*(C`\-r\*(C'\fR, +\&\f(CW\*(C`\-R\*(C'\fR, \f(CW\*(C`\-w\*(C'\fR, and \f(CW\*(C`\-W\*(C'\fR tests always return 1, and \f(CW\*(C`\-x\*(C'\fR and \f(CW\*(C`\-X\*(C'\fR return 1 +if any execute bit is set in the mode. Scripts run by the superuser +may thus need to do a \fIstat()\fR to determine the actual mode of the file, +or temporarily set their effective uid to something else. +.Sp +If you are using ACLs, there is a pragma called \f(CW\*(C`filetest\*(C'\fR that may +produce more accurate results than the bare \fIstat()\fR mode bits. +When under the \f(CW\*(C`use filetest 'access'\*(C'\fR the above-mentioned filetests +will test whether the permission can (not) be granted using the +\&\fIaccess()\fR family of system calls. Also note that the \f(CW\*(C`\-x\*(C'\fR and \f(CW\*(C`\-X\*(C'\fR may +under this pragma return true even if there are no execute permission +bits set (nor any extra execute permission ACLs). This strangeness is +due to the underlying system calls' definitions. Read the +documentation for the \f(CW\*(C`filetest\*(C'\fR pragma for more information. +.Sp +Note that \f(CW\*(C`\-s/a/b/\*(C'\fR does not do a negated substitution. Saying +\&\f(CW\*(C`\-exp($foo)\*(C'\fR still works as expected, however\*(--only single letters +following a minus are interpreted as file tests. +.Sp +The \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR 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 \f(CW\*(C`\-B\*(C'\fR file; otherwise it's a \f(CW\*(C`\-T\*(C'\fR file. Also, any file +containing null in the first block is considered a binary file. If \f(CW\*(C`\-T\*(C'\fR +or \f(CW\*(C`\-B\*(C'\fR is used on a filehandle, the current \s-1IO\s0 buffer is examined +rather than the first block. Both \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR return true on a null +file, or a file at \s-1EOF\s0 when testing a filehandle. Because you have to +read a file to do the \f(CW\*(C`\-T\*(C'\fR test, on most occasions you want to use a \f(CW\*(C`\-f\*(C'\fR +against the file first, as in \f(CW\*(C`next unless \-f $file && \-T $file\*(C'\fR. +.Sp +If any of the file tests (or either the \f(CW\*(C`stat\*(C'\fR or \f(CW\*(C`lstat\*(C'\fR 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 \f(CW\*(C`\-t\*(C'\fR, and you need to remember +that \fIlstat()\fR and \f(CW\*(C`\-l\*(C'\fR will leave values in the stat structure for the +symbolic link, not the real file.) (Also, if the stat buffer was filled by +an \f(CW\*(C`lstat\*(C'\fR call, \f(CW\*(C`\-T\*(C'\fR and \f(CW\*(C`\-B\*(C'\fR will reset it with the results of \f(CW\*(C`stat _\*(C'\fR). +Example: +.Sp +.Vb 1 +\& print "Can do.\en" if -r $a || -w _ || -x _; +.Ve +.Sp +.Vb 9 +\& stat($filename); +\& print "Readable\en" if -r _; +\& print "Writable\en" if -w _; +\& print "Executable\en" if -x _; +\& print "Setuid\en" if -u _; +\& print "Setgid\en" if -g _; +\& print "Sticky\en" if -k _; +\& print "Text\en" if -T _; +\& print "Binary\en" if -B _; +.Ve +.IP "abs \s-1VALUE\s0" 8 +.IX Xref "abs absolute" +.IX Item "abs VALUE" +.PD 0 +.IP "abs" 8 +.IX Item "abs" +.PD +Returns the absolute value of its argument. +If \s-1VALUE\s0 is omitted, uses \f(CW$_\fR. +.IP "accept \s-1NEWSOCKET\s0,GENERICSOCKET" 8 +.IX Xref "accept" +.IX Item "accept NEWSOCKET,GENERICSOCKET" +Accepts an incoming socket connect, just as the \fIaccept\fR\|(2) system call +does. Returns the packed address if it succeeded, false otherwise. +See the example in \*(L"Sockets: Client/Server Communication\*(R" in perlipc. +.Sp +On systems that support a close-on-exec flag on files, the flag will +be set for the newly opened file descriptor, as determined by the +value of $^F. See \*(L"$^F\*(R" in perlvar. +.IP "alarm \s-1SECONDS\s0" 8 +.IX Xref "alarm SIGALRM timer" +.IX Item "alarm SECONDS" +.PD 0 +.IP "alarm" 8 +.IX Item "alarm" +.PD +Arranges to have a \s-1SIGALRM\s0 delivered to this process after the +specified number of wallclock seconds has elapsed. If \s-1SECONDS\s0 is not +specified, the value stored in \f(CW$_\fR is used. (On some machines, +unfortunately, the elapsed time may be up to one second less or more +than you specified because of how seconds are counted, and process +scheduling may delay the delivery of the signal even further.) +.Sp +Only one timer may be counting at once. Each call disables the +previous timer, and an argument of \f(CW0\fR 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. +.Sp +For delays of finer granularity than one second, you may use Perl's +four-argument version of \fIselect()\fR leaving the first three arguments +undefined, or you might be able to use the \f(CW\*(C`syscall\*(C'\fR interface to +access \fIsetitimer\fR\|(2) if your system supports it. The Time::HiRes +module (from \s-1CPAN\s0, and starting from Perl 5.8 part of the standard +distribution) may also prove useful. +.Sp +It is usually a mistake to intermix \f(CW\*(C`alarm\*(C'\fR and \f(CW\*(C`sleep\*(C'\fR calls. +(\f(CW\*(C`sleep\*(C'\fR may be internally implemented in your system with \f(CW\*(C`alarm\*(C'\fR) +.Sp +If you want to use \f(CW\*(C`alarm\*(C'\fR to time out a system call you need to use an +\&\f(CW\*(C`eval\*(C'\fR/\f(CW\*(C`die\*(C'\fR pair. You can't rely on the alarm causing the system call to +fail with \f(CW$!\fR set to \f(CW\*(C`EINTR\*(C'\fR because Perl sets up signal handlers to +restart system calls on some systems. Using \f(CW\*(C`eval\*(C'\fR/\f(CW\*(C`die\*(C'\fR always works, +modulo the caveats given in \*(L"Signals\*(R" in perlipc. +.Sp +.Vb 13 +\& eval { +\& local $SIG{ALRM} = sub { die "alarm\en" }; # NB: \en required +\& alarm $timeout; +\& $nread = sysread SOCKET, $buffer, $size; +\& alarm 0; +\& }; +\& if ($@) { +\& die unless $@ eq "alarm\en"; # propagate unexpected errors +\& # timed out +\& } +\& else { +\& # didn't +\& } +.Ve +.Sp +For more information see perlipc. +.IP "atan2 Y,X" 8 +.IX Xref "atan2 arctangent tan tangent" +.IX Item "atan2 Y,X" +Returns the arctangent of Y/X in the range \-PI to \s-1PI\s0. +.Sp +For the tangent operation, you may use the \f(CW\*(C`Math::Trig::tan\*(C'\fR +function, or use the familiar relation: +.Sp +.Vb 1 +\& sub tan { sin($_[0]) / cos($_[0]) } +.Ve +.Sp +Note that atan2(0, 0) is not well\-defined. +.IP "bind \s-1SOCKET\s0,NAME" 8 +.IX Xref "bind" +.IX Item "bind SOCKET,NAME" +Binds a network address to a socket, just as the bind system call +does. Returns true if it succeeded, false otherwise. \s-1NAME\s0 should be a +packed address of the appropriate type for the socket. See the examples in +\&\*(L"Sockets: Client/Server Communication\*(R" in perlipc. +.IP "binmode \s-1FILEHANDLE\s0, \s-1LAYER\s0" 8 +.IX Xref "binmode binary text DOS Windows" +.IX Item "binmode FILEHANDLE, LAYER" +.PD 0 +.IP "binmode \s-1FILEHANDLE\s0" 8 +.IX Item "binmode FILEHANDLE" +.PD +Arranges for \s-1FILEHANDLE\s0 to be read or written in \*(L"binary\*(R" or \*(L"text\*(R" +mode on systems where the run-time libraries distinguish between +binary and text files. If \s-1FILEHANDLE\s0 is an expression, the value is +taken as the name of the filehandle. Returns true on success, +otherwise it returns \f(CW\*(C`undef\*(C'\fR and sets \f(CW$!\fR (errno). +.Sp +On some systems (in general, \s-1DOS\s0 and Windows-based systems) \fIbinmode()\fR +is necessary when you're not working with a text file. For the sake +of portability it is a good idea to always use it when appropriate, +and to never use it when it isn't appropriate. Also, people can +set their I/O to be by default \s-1UTF\-8\s0 encoded Unicode, not bytes. +.Sp +In other words: regardless of platform, use \fIbinmode()\fR on binary data, +like for example images. +.Sp +If \s-1LAYER\s0 is present it is a single string, but may contain multiple +directives. The directives alter the behaviour of the file handle. +When \s-1LAYER\s0 is present using binmode on text file makes sense. +.Sp +If \s-1LAYER\s0 is omitted or specified as \f(CW\*(C`:raw\*(C'\fR the filehandle is made +suitable for passing binary data. This includes turning off possible \s-1CRLF\s0 +translation and marking it as bytes (as opposed to Unicode characters). +Note that, despite what may be implied in \fI\*(L"Programming Perl\*(R"\fR (the +Camel) or elsewhere, \f(CW\*(C`:raw\*(C'\fR is \fInot\fR the simply inverse of \f(CW\*(C`:crlf\*(C'\fR +\&\*(-- other layers which would affect binary nature of the stream are +\&\fIalso\fR disabled. See PerlIO, perlrun and the discussion about the +\&\s-1PERLIO\s0 environment variable. +.Sp +The \f(CW\*(C`:bytes\*(C'\fR, \f(CW\*(C`:crlf\*(C'\fR, and \f(CW\*(C`:utf8\*(C'\fR, and any other directives of the +form \f(CW\*(C`:...\*(C'\fR, are called I/O \fIlayers\fR. The \f(CW\*(C`open\*(C'\fR pragma can be used to +establish default I/O layers. See open. +.Sp +\&\fIThe \s-1LAYER\s0 parameter of the \fIbinmode()\fI function is described as \*(L"\s-1DISCIPLINE\s0\*(R" +in \*(L"Programming Perl, 3rd Edition\*(R". However, since the publishing of this +book, by many known as \*(L"Camel \s-1III\s0\*(R", the consensus of the naming of this +functionality has moved from \*(L"discipline\*(R" to \*(L"layer\*(R". All documentation +of this version of Perl therefore refers to \*(L"layers\*(R" rather than to +\&\*(L"disciplines\*(R". Now back to the regularly scheduled documentation...\fR +.Sp +To mark \s-1FILEHANDLE\s0 as \s-1UTF\-8\s0, use \f(CW\*(C`:utf8\*(C'\fR. +.Sp +In general, \fIbinmode()\fR should be called after \fIopen()\fR but before any I/O +is done on the filehandle. Calling \fIbinmode()\fR will normally flush any +pending buffered output data (and perhaps pending input data) on the +handle. An exception to this is the \f(CW\*(C`:encoding\*(C'\fR layer that +changes the default character encoding of the handle, see open. +The \f(CW\*(C`:encoding\*(C'\fR layer sometimes needs to be called in +mid\-stream, and it doesn't flush the stream. The \f(CW\*(C`:encoding\*(C'\fR +also implicitly pushes on top of itself the \f(CW\*(C`:utf8\*(C'\fR layer because +internally Perl will operate on \s-1UTF\-8\s0 encoded Unicode characters. +.Sp +The operating system, device drivers, C libraries, and Perl run-time +system all work together to let the programmer treat a single +character (\f(CW\*(C`\en\*(C'\fR) as the line terminator, irrespective of the external +representation. On many operating systems, the native text file +representation matches the internal representation, but on some +platforms the external representation of \f(CW\*(C`\en\*(C'\fR is made up of more than +one character. +.Sp +Mac \s-1OS\s0, all variants of Unix, and Stream_LF files on \s-1VMS\s0 use a single +character to end each line in the external representation of text (even +though that single character is \s-1CARRIAGE\s0 \s-1RETURN\s0 on Mac \s-1OS\s0 and \s-1LINE\s0 \s-1FEED\s0 +on Unix and most \s-1VMS\s0 files). In other systems like \s-1OS/2\s0, \s-1DOS\s0 and the +various flavors of MS-Windows your program sees a \f(CW\*(C`\en\*(C'\fR as a simple \f(CW\*(C`\ecJ\*(C'\fR, +but what's stored in text files are the two characters \f(CW\*(C`\ecM\ecJ\*(C'\fR. That +means that, if you don't use \fIbinmode()\fR on these systems, \f(CW\*(C`\ecM\ecJ\*(C'\fR +sequences on disk will be converted to \f(CW\*(C`\en\*(C'\fR on input, and any \f(CW\*(C`\en\*(C'\fR in +your program will be converted back to \f(CW\*(C`\ecM\ecJ\*(C'\fR on output. This is what +you want for text files, but it can be disastrous for binary files. +.Sp +Another consequence of using \fIbinmode()\fR (on some systems) is that +special end-of-file markers will be seen as part of the data stream. +For systems from the Microsoft family this means that if your binary +data contains \f(CW\*(C`\ecZ\*(C'\fR, the I/O subsystem will regard it as the end of +the file, unless you use \fIbinmode()\fR. +.Sp +\&\fIbinmode()\fR is not only important for \fIreadline()\fR and \fIprint()\fR operations, +but also when using \fIread()\fR, \fIseek()\fR, \fIsysread()\fR, \fIsyswrite()\fR and \fItell()\fR +(see perlport for more details). See the \f(CW$/\fR and \f(CW\*(C`$\e\*(C'\fR variables +in perlvar for how to manually set your input and output +line-termination sequences. +.IP "bless \s-1REF\s0,CLASSNAME" 8 +.IX Xref "bless" +.IX Item "bless REF,CLASSNAME" +.PD 0 +.IP "bless \s-1REF\s0" 8 +.IX Item "bless REF" +.PD +This function tells the thingy referenced by \s-1REF\s0 that it is now an object +in the \s-1CLASSNAME\s0 package. If \s-1CLASSNAME\s0 is omitted, the current package +is used. Because a \f(CW\*(C`bless\*(C'\fR is often the last thing in a constructor, +it returns the reference for convenience. Always use the two-argument +version if a derived class might inherit the function doing the blessing. +See perltoot and perlobj for more about the blessing (and blessings) +of objects. +.Sp +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. To prevent +confusion, you may wish to avoid such package names as well. Make sure +that \s-1CLASSNAME\s0 is a true value. +.Sp +See \*(L"Perl Modules\*(R" in perlmod. +.IP "caller \s-1EXPR\s0" 8 +.IX Xref "caller call stack stack stack trace" +.IX Item "caller EXPR" +.PD 0 +.IP "caller" 8 +.IX Item "caller" +.PD +Returns the context of the current subroutine call. In scalar context, +returns the caller's package name if there is a caller, that is, if +we're in a subroutine or \f(CW\*(C`eval\*(C'\fR or \f(CW\*(C`require\*(C'\fR, and the undefined value +otherwise. In list context, returns +.Sp +.Vb 1 +\& ($package, $filename, $line) = caller; +.Ve +.Sp +With \s-1EXPR\s0, it returns some extra information that the debugger uses to +print a stack trace. The value of \s-1EXPR\s0 indicates how many call frames +to go back before the current one. +.Sp +.Vb 2 +\& ($package, $filename, $line, $subroutine, $hasargs, +\& $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i); +.Ve +.Sp +Here \f(CW$subroutine\fR may be \f(CW\*(C`(eval)\*(C'\fR if the frame is not a subroutine +call, but an \f(CW\*(C`eval\*(C'\fR. In such a case additional elements \f(CW$evaltext\fR and +\&\f(CW$is_require\fR are set: \f(CW$is_require\fR is true if the frame is created by a +\&\f(CW\*(C`require\*(C'\fR or \f(CW\*(C`use\*(C'\fR statement, \f(CW$evaltext\fR contains the text of the +\&\f(CW\*(C`eval EXPR\*(C'\fR statement. In particular, for an \f(CW\*(C`eval BLOCK\*(C'\fR statement, +\&\f(CW$filename\fR is \f(CW\*(C`(eval)\*(C'\fR, but \f(CW$evaltext\fR is undefined. (Note also that +each \f(CW\*(C`use\*(C'\fR statement creates a \f(CW\*(C`require\*(C'\fR frame inside an \f(CW\*(C`eval EXPR\*(C'\fR +frame.) \f(CW$subroutine\fR may also be \f(CW\*(C`(unknown)\*(C'\fR if this particular +subroutine happens to have been deleted from the symbol table. +\&\f(CW$hasargs\fR is true if a new instance of \f(CW@_\fR was set up for the frame. +\&\f(CW$hints\fR and \f(CW$bitmask\fR contain pragmatic hints that the caller was +compiled with. The \f(CW$hints\fR and \f(CW$bitmask\fR values are subject to change +between versions of Perl, and are not meant for external use. +.Sp +Furthermore, when called from within the \s-1DB\s0 package, caller returns more +detailed information: it sets the list variable \f(CW@DB::args\fR to be the +arguments with which the subroutine was invoked. +.Sp +Be aware that the optimizer might have optimized call frames away before +\&\f(CW\*(C`caller\*(C'\fR had a chance to get the information. That means that \f(CWcaller(N)\fR +might not return information about the call frame you expect it do, for +\&\f(CW\*(C`N > 1\*(C'\fR. In particular, \f(CW@DB::args\fR might have information from the +previous time \f(CW\*(C`caller\*(C'\fR was called. +.IP "chdir \s-1EXPR\s0" 8 +.IX Xref "chdir cd" +.IX Item "chdir EXPR" +.PD 0 +.IP "chdir \s-1FILEHANDLE\s0" 8 +.IX Item "chdir FILEHANDLE" +.IP "chdir \s-1DIRHANDLE\s0" 8 +.IX Item "chdir DIRHANDLE" +.IP "chdir" 8 +.IX Item "chdir" +.PD +Changes the working directory to \s-1EXPR\s0, if possible. If \s-1EXPR\s0 is omitted, +changes to the directory specified by \f(CW$ENV{HOME}\fR, if set; if not, +changes to the directory specified by \f(CW$ENV{LOGDIR}\fR. (Under \s-1VMS\s0, the +variable \f(CW$ENV{SYS$LOGIN}\fR is also checked, and used if it is set.) If +neither is set, \f(CW\*(C`chdir\*(C'\fR does nothing. It returns true upon success, +false otherwise. See the example under \f(CW\*(C`die\*(C'\fR. +.Sp +On systems that support fchdir, you might pass a file handle or +directory handle as argument. On systems that don't support fchdir, +passing handles produces a fatal error at run time. +.IP "chmod \s-1LIST\s0" 8 +.IX Xref "chmod permission mode" +.IX Item "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 \fInot\fR be a string of octal digits: +\&\f(CW0644\fR is okay, \f(CW'0644'\fR is not. Returns the number of files +successfully changed. See also \*(L"oct\*(R", if all you have is a string. +.Sp +.Vb 6 +\& $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 +.Ve +.Sp +On systems that support fchmod, you might pass file handles among the +files. On systems that don't support fchmod, passing file handles +produces a fatal error at run time. +.Sp +.Vb 3 +\& open(my $fh, "<", "foo"); +\& my $perm = (stat $fh)[2] & 07777; +\& chmod($perm | 0600, $fh); +.Ve +.Sp +You can also import the symbolic \f(CW\*(C`S_I*\*(C'\fR constants from the Fcntl +module: +.Sp +.Vb 1 +\& use Fcntl ':mode'; +.Ve +.Sp +.Vb 2 +\& chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables; +\& # This is identical to the chmod 0755 of the above example. +.Ve +.IP "chomp \s-1VARIABLE\s0" 8 +.IX Xref "chomp INPUT_RECORD_SEPARATOR $ newline eol" +.IX Item "chomp VARIABLE" +.PD 0 +.IP "chomp( \s-1LIST\s0 )" 8 +.IX Item "chomp( LIST )" +.IP "chomp" 8 +.IX Item "chomp" +.PD +This safer version of \*(L"chop\*(R" removes any trailing string +that corresponds to the current value of \f(CW$/\fR (also known as +\&\f(CW$INPUT_RECORD_SEPARATOR\fR in the \f(CW\*(C`English\*(C'\fR 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 (\f(CW\*(C`$/ = ""\*(C'\fR), it removes all trailing newlines from the string. +When in slurp mode (\f(CW\*(C`$/ = undef\*(C'\fR) or fixed-length record mode (\f(CW$/\fR is +a reference to an integer or the like, see perlvar) \fIchomp()\fR won't +remove anything. +If \s-1VARIABLE\s0 is omitted, it chomps \f(CW$_\fR. Example: +.Sp +.Vb 5 +\& while (<>) { +\& chomp; # avoid \en on last field +\& @array = split(/:/); +\& # ... +\& } +.Ve +.Sp +If \s-1VARIABLE\s0 is a hash, it chomps the hash's values, but not its keys. +.Sp + + +---tokens--- +'.' Punctuation +'\\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32' Comment +'\n' Text + +'.' Punctuation +'\\"' Comment +'\n' Text + +'.' Punctuation +'\\" Standard preamble:' Comment +'\n' Text + +'.' Punctuation +'\\" ========================================================================' Comment +'\n' Text + +'.' Text +'de' Keyword +' ' Text +'Sh' Literal.String +' ' Text +'\\" Subsection heading' Comment +'\n' Text + +'.' Text +'br' Keyword +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'t' Literal.String +' ' Text +'.Sp' Literal.String +'\n' Text + +'.' Text +'ne' Keyword +' ' Text +'5' Literal.Number +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'\\fB' Literal.String.Escape +'\\\\' Literal.String.Escape +'$1' Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'.' Punctuation +'.' Literal.String +'\n' Text + +'.' Text +'de' Keyword +' ' Text +'Sp' Literal.String +' ' Text +'\\" Vertical space (when we can\'t use .PP)' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'t' Literal.String +' ' Text +'.sp' Literal.String +' ' Text +'.5v' Literal.String +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'n' Literal.String +' ' Text +'.sp' Literal.String +'\n' Text + +'.' Punctuation +'.' Literal.String +'\n' Text + +'.' Text +'de' Keyword +' ' Text +'Vb' Literal.String +' ' Text +'\\" Begin verbatim text' Comment +'\n' Text + +'.' Text +'ft' Keyword +' ' Text +'CW' Literal.String +'\n' Text + +'.' Text +'nf' Keyword +'\n' Text + +'.' Text +'ne' Keyword +' ' Text +'\\\\' Literal.String.Escape +'$1' Literal.String +'\n' Text + +'.' Punctuation +'.' Literal.String +'\n' Text + +'.' Text +'de' Keyword +' ' Text +'Ve' Literal.String +' ' Text +'\\" End verbatim text' Comment +'\n' Text + +'.' Text +'ft' Keyword +' ' Text +'R' Literal.String +'\n' Text + +'.' Text +'fi' Keyword +'\n' Text + +'.' Punctuation +'.' Literal.String +'\n' Text + +'.' Punctuation +'\\" Set up some character translations and predefined strings. \\*(-- will' Comment +'\n' Text + +'.' Punctuation +'\\" give an unbreakable dash, \\*(PI will give pi, \\*(L" will give a left' Comment +'\n' Text + +'.' Punctuation +'\\" double quote, and \\*(R" will give a right double quote. | will give a' Comment +'\n' Text + +'.' Punctuation +'\\" real vertical bar. \\*(C+ will give a nicer C++. Capital omega is used to' Comment +'\n' Text + +'.' Punctuation +'\\" do unbreakable dashes and therefore won\'t be available. \\*(C` and \\*(C\'' Comment +'\n' Text + +'.' Punctuation +'\\" expand to `\' in nroff, nothing in troff, for use with C<>.' Comment +'\n' Text + +'.' Text +'tr' Keyword +' ' Text +'\\(*W' Literal.String.Escape +'-|\\(bv\\*(Tr' Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'C+' Literal.String +' ' Text +"C\\v'-.1v'\\h'-1p'\\s-2+\\h'-1p'+\\s0\\v'.1v'\\h'-1p'" Literal.String +'\n' Text + +'.' Text +'ie' Keyword +' ' Text +'n' Literal.String +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'--' Literal.String +' ' Text +'\\(*W' Literal.String.Escape +'-' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'PI' Literal.String +' ' Text +'pi' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'if' Literal.String +' ' Text +'(\\n(.H=4u)&(1m=24u)' Literal.String +' ' Text +'.ds' Literal.String +' ' Text +'--' Literal.String +' ' Text +'\\(*W' Literal.String.Escape +'\\h' Literal.String.Escape +'\'-12u\'\\(*W\\h\'-12u\'-\\"' Literal.String +' ' Text +'diablo' Literal.String +' ' Text +'10' Literal.Number +' ' Text +'pitch' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'if' Literal.String +' ' Text +'(\\n(.H=4u)&(1m=20u)' Literal.String +' ' Text +'.ds' Literal.String +' ' Text +'--' Literal.String +' ' Text +'\\(*W' Literal.String.Escape +'\\h' Literal.String.Escape +'\'-12u\'\\(*W\\h\'-8u\'-\\"' Literal.String +' ' Text +'diablo' Literal.String +' ' Text +'12' Literal.Number +' ' Text +'pitch' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'L"' Literal.String +' ' Text +'""' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'R"' Literal.String +' ' Text +'""' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'C`' Literal.String +' ' Text +'""' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +"C'" Literal.String +' ' Text +'""' Literal.String +'\n' Text + +"'br" Text +'\\}' Literal.String.Escape +'\n' Text + +'.' Text +'el' Keyword +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'--' Literal.String +' ' Text +'\\|' Literal.String.Escape +'\\(em' Literal.String.Escape +'\\|' Literal.String.Escape +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'PI' Literal.String +' ' Text +'\\(*p' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'L"' Literal.String +' ' Text +'``' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'R"' Literal.String +' ' Text +"''" Literal.String +'\n' Text + +"'br" Text +'\\}' Literal.String.Escape +'\n' Text + +'.' Punctuation +'\\"' Comment +'\n' Text + +'.' Punctuation +'\\" If the F register is turned on, we\'ll generate index entries on stderr for' Comment +'\n' Text + +'.' Punctuation +'\\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index' Comment +'\n' Text + +'.' Punctuation +'\\" entries marked with X<> in POD. Of course, you\'ll have to process the' Comment +'\n' Text + +'.' Punctuation +'\\" output yourself in some meaningful fashion.' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'\\nF' Literal.String.Escape +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'de' Literal.String +' ' Text +'IX' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'tm' Literal.String +' ' Text +'Index:\\\\$1\\t\\\\n%\\t"\\\\$2"' Literal.String +'\n' Text + +'.' Punctuation +'.' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'nr' Literal.String +' ' Text +'%' Literal.String +' ' Text +'0' Literal.Number +'\n' Text + +'.' Punctuation +' ' Text +'rr' Literal.String +' ' Text +'F' Literal.String +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Punctuation +'\\"' Comment +'\n' Text + +'.' Punctuation +'\\" For nroff, turn off justification. Always turn off hyphenation; it makes' Comment +'\n' Text + +'.' Punctuation +'\\" way too many mistakes in technical documents.' Comment +'\n' Text + +'.' Text +'hy' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'n' Literal.String +' ' Text +'.na' Literal.String +'\n' Text + +'.' Punctuation +'\\"' Comment +'\n' Text + +'.' Punctuation +'\\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).' Comment +'\n' Text + +'.' Punctuation +'\\" Fear. Run. Save yourself. No user-serviceable parts.' Comment +'\n' Text + +'.' Punctuation +' ' Text +'\\" fudge factors for nroff and troff' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'n' Literal.String +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'#H' Literal.String +' ' Text +'0' Literal.Number +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'#V' Literal.String +' ' Text +'.8m' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#F' Literal.String +' ' Text +'.3m' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#[' Literal.String +' ' Text +'\\f1' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#]' Literal.String +' ' Text +'\\fP' Literal.String.Escape +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'t' Literal.String +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'#H' Literal.String +' ' Text +'((1u-(\\\\\\\\n(.fu%2u))*.13m)' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'#V' Literal.String +' ' Text +'.6m' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#F' Literal.String +' ' Text +'0' Literal.Number +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#[' Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'#]' Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'\\" simple accents for nroff and troff' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'n' Literal.String +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +"'" Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'`' Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'^' Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +',' Literal.String +' ' Text +'\\&' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'~' Literal.String +' ' Text +'~' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'/' Literal.String +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'t' Literal.String +' ' Text +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +"'" Literal.String +' ' Text +'\\\\' Literal.String.Escape +'k:\\h\'-(\\\\n(.wu*8/10-\\*(#H)\'\\\'\\h"|\\\\n:u"' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'`' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*8/10-\\*(#H)'\\`\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'^' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*10/11-\\*(#H)'^\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +',' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*8/10)',\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'~' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu-\\*(#H-.1m)'~\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'/' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*8/10-\\*(#H)'\\z\\(sl\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Punctuation +' ' Text +'\\" troff and (daisy-wheel) nroff accents' Comment +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +':' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*8/10-\\*(#H+.1m+\\*(#F)'\\v'-\\*(#V'\\z.\\h'.2m+\\*(#F'.\\h'|\\\\n:u'\\v'\\*(#V'" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'8' Literal.Number +' ' Text +'\\h' Literal.String.Escape +"'\\*(#H'\\(*b\\h'-\\*(#H'" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'o' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu+\\w'\\(de'u-\\*(#H)/2u'\\v'-.3n'\\*(#[\\z\\(de\\v'.3n'\\h'|\\\\n:u'\\*(#]" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'d-' Literal.String +' ' Text +'\\h' Literal.String.Escape +"'\\*(#H'\\(pd\\h'-\\w'~'u'\\v'-.25m'\\f2\\(hy\\fP\\v'.25m'\\h'-\\*(#H'" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'D-' Literal.String +' ' Text +"D\\\\k:\\h'-\\w'D'u'\\v'-.11m'\\z\\(hy\\v'.11m'\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'th' Literal.String +' ' Text +'\\*' Literal.String.Escape +"(#[\\v'.3m'\\s+1I\\s-1\\v'-.3m'\\h'-(\\w'I'u*2/3)'\\s-1o\\s+1\\*(#]" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'Th' Literal.String +' ' Text +'\\*' Literal.String.Escape +"(#[\\s+2I\\s-2\\h'-\\w'I'u*3/5'\\v'-.3m'o\\v'.3m'\\*(#]" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'ae' Literal.String +' ' Text +"a\\h'-(\\w'a'u*4/10)'e" Literal.String +'\n' Text + +'.' Text +'ds' Keyword +' ' Text +'Ae' Literal.String +' ' Text +"A\\h'-(\\w'A'u*4/10)'E" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'\\" corrections for vroff' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'v' Literal.String +' ' Text +'.ds' Literal.String +' ' Text +'~' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*9/10-\\*(#H)'\\s-2\\u~\\d\\s+2\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'v' Literal.String +' ' Text +'.ds' Literal.String +' ' Text +'^' Literal.String +' ' Text +'\\\\' Literal.String.Escape +"k:\\h'-(\\\\n(.wu*10/11-\\*(#H)'\\v'-.4m'^\\v'.4m'\\h'|\\\\n:u'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'\\" for low resolution devices (crt and lpr)' Comment +'\n' Text + +'.' Text +'if' Keyword +' ' Text +'\\n' Literal.String.Escape +'(.H>23' Literal.String +' ' Text +'.if' Literal.String +' ' Text +'\\n' Literal.String.Escape +'(.V>19' Literal.String +' ' Text +'\\\n' Text + +'\\{' Literal.String.Escape +'\\\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +':' Literal.String +' ' Text +'e' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'8' Literal.Number +' ' Text +'ss' Literal.String +'\n' Text + +'.' Literal.String +' ' Text +'ds' Literal.String +' ' Text +'o' Literal.String +' ' Text +'a' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'d-' Literal.String +' ' Text +"d\\h'-1'\\(ga" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'D-' Literal.String +' ' Text +"D\\h'-1'\\(hy" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'th' Literal.String +' ' Text +'\\o' Literal.String.Escape +"'bp'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'Th' Literal.String +' ' Text +'\\o' Literal.String.Escape +"'LP'" Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'ae' Literal.String +' ' Text +'ae' Literal.String +'\n' Text + +'.' Punctuation +' ' Text +'ds' Literal.String +' ' Text +'Ae' Literal.String +' ' Text +'AE' Literal.String +'\n' Text + +'.' Punctuation +'\\}' Literal.String.Escape +'\n' Text + +'.' Text +'rm' Keyword +' ' Text +'#[' Literal.String +' ' Text +'#]' Literal.String +' ' Text +'#H' Literal.String +' ' Text +'#V' Literal.String +' ' Text +'#F' Literal.String +' ' Text +'C' Literal.String +'\n' Text + +'.' Punctuation +'\\" ========================================================================' Comment +'\n' Text + +'.' Punctuation +'\\"' Comment +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Title' Literal.String +' ' Text +'"PERLFUNC 1"' Literal.String.Double +'\n' Text + +'.' Text +'TH' Keyword +' ' Text +'PERLFUNC' Literal.String +' ' Text +'1' Literal.Number +' ' Text +'"2006-01-07"' Literal.String.Double +' ' Text +'"perl v5.8.8"' Literal.String.Double +' ' Text +'"Perl Programmers Reference Guide"' Literal.String.Double +'\n' Text + +'.' Text +'SH' Keyword +' ' Text +'"NAME"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"function"' Literal.String.Double +'\n' Text + +'perlfunc ' Text +'\\-' Literal.String.Escape +' Perl builtin functions' Text +'\n' Text + +'.' Text +'SH' Keyword +' ' Text +'"DESCRIPTION"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Header' Literal.String +' ' Text +'"DESCRIPTION"' Literal.String.Double +'\n' Text + +'The functions in this section can serve as terms in an expression.' Text +'\n' Text + +'They fall into two major categories: list operators and named unary' Text +'\n' Text + +'operators. These differ in their precedence relationship with a' Text +'\n' Text + +'following comma. (See the precedence table in perlop.) List' Text +'\n' Text + +'operators take more than one argument, while unary operators can never' Text +'\n' Text + +'take more than one argument. Thus, a comma terminates the argument of' Text +'\n' Text + +'a unary operator, but merely separates the arguments of a list' Text +'\n' Text + +'operator. A unary operator generally provides a scalar context to its' Text +'\n' Text + +'argument, while a list operator may provide either scalar or list' Text +'\n' Text + +'contexts for its arguments. If it does both, the scalar arguments will' Text +'\n' Text + +'be first, and the list argument will follow. (Note that there can ever' Text +'\n' Text + +'be only one such list argument.) For instance, ' Text +'\\fI' Literal.String.Escape +'splice()' Text +'\\fR' Literal.String.Escape +' has three scalar' Text +'\n' Text + +'arguments followed by a list, whereas ' Text +'\\fI' Literal.String.Escape +'gethostbyname()' Text +'\\fR' Literal.String.Escape +' has four scalar' Text +'\n' Text + +'arguments.' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'In the syntax descriptions that follow, list operators that expect a' Text +'\n' Text + +'list (and provide list context for the elements of the list) are shown' Text +'\n' Text + +'with ' Text +'\\s' Literal.String.Escape +'-1LIST' Text +'\\s' Literal.String.Escape +'0 as an argument. Such a list may consist of any combination' Text +'\n' Text + +'of scalar arguments or list values; the list values will be included' Text +'\n' Text + +'in the list as if each individual element were interpolated at that' Text +'\n' Text + +'point in the list, forming a longer single-dimensional list value.' Text +'\n' Text + +'Commas should separate elements of the ' Text +'\\s' Literal.String.Escape +'-1LIST' Text +'\\s' Literal.String.Escape +'0.' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'Any function in the list below may be used either with or without' Text +'\n' Text + +'parentheses around its arguments. (The syntax descriptions omit the' Text +'\n' Text + +'parentheses.) If you use the parentheses, the simple (but occasionally' Text +'\n' Text + +'surprising) rule is this: It ' Text +'\\fI' Literal.String.Escape +'looks' Text +'\\fR' Literal.String.Escape +' like a function, therefore it ' Text +'\\fI' Literal.String.Escape +'is' Text +'\\fR' Literal.String.Escape +' a' Text +'\n' Text + +"function, and precedence doesn't matter. Otherwise it's a list" Text +'\n' Text + +'operator or unary operator, and precedence does matter. And whitespace' Text +'\n' Text + +"between the function and left parenthesis doesn't count" Text +'\\*' Literal.String.Escape +'(--so you need to' Text +'\n' Text + +'be careful sometimes:' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'5' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' print 1+2+4; # Prints 7.' Text +'\n' Text + +'\\&' Literal.String.Escape +' print(1+2) + 4; # Prints 3.' Text +'\n' Text + +'\\&' Literal.String.Escape +' print (1+2)+4; # Also prints 3!' Text +'\n' Text + +'\\&' Literal.String.Escape +' print +(1+2)+4; # Prints 7.' Text +'\n' Text + +'\\&' Literal.String.Escape +' print ((1+2)+4); # Prints 7.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'If you run Perl with the ' Text +'\\fB' Literal.String.Escape +'\\-' Literal.String.Escape +'w' Text +'\\fR' Literal.String.Escape +' switch it can warn you about this. For' Text +'\n' Text + +'example, the third line above produces:' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'2' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' print (...) interpreted as function at - line 1.' Text +'\n' Text + +'\\&' Literal.String.Escape +' Useless use of integer addition in void context at - line 1.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'A few functions take no arguments at all, and therefore work as neither' Text +'\n' Text + +'unary nor list operators. These include such functions as ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`time' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'. For example, ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`time+86_400' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' always means' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`time() + 86_400' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'For functions that can be used in either a scalar or list context,' Text +'\n' Text + +'nonabortive failure is generally indicated in a scalar context by' Text +'\n' Text + +'returning the undefined value, and in a list context by returning the' Text +'\n' Text + +'null list.' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'Remember the following important rule: There is ' Text +'\\fB' Literal.String.Escape +'no rule' Text +'\\fR' Literal.String.Escape +' that relates' Text +'\n' Text + +'the behavior of an expression in list context to its behavior in scalar' Text +'\n' Text + +'context, or vice versa. It might do two totally different things.' Text +'\n' Text + +'Each operator and function decides which sort of value it would be most' Text +'\n' Text + +'appropriate to return in scalar context. Some operators return the' Text +'\n' Text + +'length of the list that would have been returned in list context. Some' Text +'\n' Text + +'operators return the first value in the list. Some operators return the' Text +'\n' Text + +'last value in the list. Some operators return a count of successful' Text +'\n' Text + +'operations. In general, they do what you want, unless you want' Text +'\n' Text + +'consistency.' Text +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"context"' Literal.String.Double +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'A named array in scalar context is quite different from what would at' Text +'\n' Text + +"first glance appear to be a list in scalar context. You can't get a list" Text +'\n' Text + +'like ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`(1,2,3)' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' into being in scalar context, because the compiler knows' Text +'\n' Text + +'the context at compile time. It would generate the scalar comma operator' Text +'\n' Text + +'there, not the list construction version of the comma. That means it' Text +'\n' Text + +'was never a list to start with.' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'In general, functions in Perl that serve as wrappers for system calls' Text +'\n' Text + +'of the same name (like ' Text +'\\fI' Literal.String.Escape +'chown' Text +'\\fR' Literal.String.Escape +'\\|' Literal.String.Escape +'(2), ' Text +'\\fI' Literal.String.Escape +'fork' Text +'\\fR' Literal.String.Escape +'\\|' Literal.String.Escape +'(2), ' Text +'\\fI' Literal.String.Escape +'closedir' Text +'\\fR' Literal.String.Escape +'\\|' Literal.String.Escape +'(2), etc.) all return' Text +'\n' Text + +'true when they succeed and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`undef' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' otherwise, as is usually mentioned' Text +'\n' Text + +'in the descriptions below. This is different from the C interfaces,' Text +'\n' Text + +'which return ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'1' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' on failure. Exceptions to this rule are ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`wait' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`waitpid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syscall' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'. System calls also set the special ' Text +'\\f' Literal.String.Escape +'(CW$!' Text +'\\fR' Literal.String.Escape +'\n' Text + +'variable on failure. Other functions do not, except accidentally.' Text +'\n' Text + +'.' Text +'Sh' Keyword +' ' Text +'"Perl Functions by Category"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"function"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Subsection' Literal.String +' ' Text +'"Perl Functions by Category"' Literal.String.Double +'\n' Text + +"Here are Perl's functions (including things that look like" Text +'\n' Text + +'functions, like some keywords and named operators)' Text +'\n' Text + +'arranged by category. Some functions appear in more' Text +'\n' Text + +'than one place.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions for SCALARs or strings"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"scalar string character"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for SCALARs or strings"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chomp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chop' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`crypt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`hex' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`index' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lc' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lcfirst' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`length' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`oct' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ord' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pack' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`q/STRING/' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qq/STRING/' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`reverse' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rindex' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sprintf' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`substr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tr///' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`uc' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ucfirst' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`y///' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Regular expressions and pattern matching"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"regular expression regex regexp"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Regular expressions and pattern matching"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`m//' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pos' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`quotemeta' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`s///' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`split' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`study' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qr//' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Numeric functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"numeric number trigonometric trigonometry"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Numeric functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`abs' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`atan2' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`cos' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`hex' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`int' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`log' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`oct' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rand' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sin' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sqrt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`srand' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'ie' Keyword +' ' Text +'n' Literal.String +' ' Text +'.IP' Literal.String +' ' Text +'"Functions for real @ARRAYs"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'el' Keyword +' ' Text +'.IP' Literal.String +' ' Text +'"Functions for real \\f(CW@ARRAYs\\fR"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"array"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for real @ARRAYs"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pop' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`push' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shift' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`splice' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`unshift' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions for list data"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"list"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for list data"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`grep' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`join' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`map' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qw/STRING/' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`reverse' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sort' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`unpack' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'ie' Keyword +' ' Text +'n' Literal.String +' ' Text +'.IP' Literal.String +' ' Text +'"Functions for real %HASHes"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'el' Keyword +' ' Text +'.IP' Literal.String +' ' Text +'"Functions for real \\f(CW%HASHes\\fR"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"hash"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for real %HASHes"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`delete' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`each' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exists' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`keys' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`values' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Input and output functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"I O input output dbm"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Input and output functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`binmode' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`close' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`closedir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmclose' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`die' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eof' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`fileno' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`flock' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`format' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getc' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`print' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`printf' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`read' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`readdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rewinddir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`seek' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`seekdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`select' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syscall' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysread' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysseek' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syswrite' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tell' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`telldir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`truncate' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`warn' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`write' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions for fixed length data or records"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for fixed length data or records"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pack' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`read' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syscall' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysread' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syswrite' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`unpack' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`vec' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions for filehandles, files, or directories"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"file filehandle directory pipe link symlink"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for filehandles, files, or directories"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'\\f' Literal.String.Escape +'(CIX' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chmod' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chown' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chroot' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`fcntl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`glob' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ioctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`link' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lstat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`mkdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`open' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`opendir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`readlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rename' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rmdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`stat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`symlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`umask' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`unlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`utime' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Keywords related to the control flow of your Perl program"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"control flow"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Keywords related to the control flow of your Perl program"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`caller' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`continue' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`die' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`do' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dump' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exit' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`goto' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`last' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`next' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`redo' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`return' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sub' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`wantarray' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Keywords related to scoping"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Keywords related to scoping"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`caller' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`import' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`local' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`my' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`our' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`package' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Miscellaneous functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Miscellaneous functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`defined' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dump' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`formline' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`local' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`my' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`our' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`reset' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`scalar' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`undef' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`wantarray' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions for processes and process groups"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"process pid process id"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions for processes and process groups"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`alarm' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exec' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`fork' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpgrp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getppid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpriority' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`kill' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pipe' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qx/STRING/' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpgrp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpriority' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sleep' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`system' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`times' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`wait' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`waitpid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Keywords related to perl modules"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"module"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Keywords related to perl modules"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`do' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`import' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`no' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`package' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`require' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Keywords related to classes and object-orientedness"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"object class package"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Keywords related to classes and object-orientedness"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`bless' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmclose' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`package' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ref' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tie' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tied' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`untie' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Low-level socket functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"socket sock"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Low-level socket functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`accept' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`bind' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`connect' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpeername' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getsockname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getsockopt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`listen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`recv' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`send' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setsockopt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shutdown' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`socket' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`socketpair' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"System V interprocess communication functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"IPC System V semaphore shared memory memory message"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"System V interprocess communication functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgrcv' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgsnd' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semop' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmread' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmwrite' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Fetching user and group info"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"user group password uid gid passwd etc passwd"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Fetching user and group info"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endhostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getgrgid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getgrnam' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getlogin' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwnam' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwuid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Fetching network info"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"network protocol host hostname IP address service"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Fetching network info"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gethostbyaddr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gethostbyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gethostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetbyaddr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetbyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getprotobyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getprotobynumber' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getservbyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getservbyport' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sethostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Time-related functions"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"time date"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Time-related functions"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gmtime' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`localtime' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`time' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`times' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions new in perl5"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"perl5"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions new in perl5"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`abs' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`bless' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chomp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exists' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`formline' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`glob' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`import' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lc' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lcfirst' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`map' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`my' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`no' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`our' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`prototype' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qx' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`qw' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`readline' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`readpipe' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ref' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sub*' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tie' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`tied' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`uc' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ucfirst' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`untie' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'* ' Text +'\\-' Literal.String.Escape +' ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sub' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' was a keyword in perl4, but in perl5 it is an' Text +'\n' Text + +'operator, which can be used in expressions.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"Functions obsoleted in perl5"' Literal.String.Double +' ' Text +'4' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"Functions obsoleted in perl5"' Literal.String.Double +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmclose' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'Sh' Keyword +' ' Text +'"Portability"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"portability Unix portable"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Subsection' Literal.String +' ' Text +'"Portability"' Literal.String.Double +'\n' Text + +'Perl was born in Unix and can therefore access all common Unix' Text +'\n' Text + +'system calls. In non-Unix environments, the functionality of some' Text +'\n' Text + +'Unix system calls may not be available, or details of the available' Text +'\n' Text + +'functionality may differ slightly. The Perl functions affected' Text +'\n' Text + +'by this are:' Text +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'X' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`binmode' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chmod' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chown' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chroot' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`crypt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmclose' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dbmopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`dump' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endhostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`endservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`exec' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`fcntl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`flock' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`fork' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getgrgid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gethostbyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`gethostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getlogin' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetbyaddr' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetbyname' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getppid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpgrp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpriority' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getprotobynumber' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwnam' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getpwuid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getservbyport' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`getsockopt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`glob' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`ioctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`kill' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`link' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lstat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgrcv' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`msgsnd' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`open' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`pipe' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`readlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`rename' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`select' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`semop' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setgrent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sethostent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setnetent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpgrp' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpriority' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setprotoent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setpwent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setservent' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`setsockopt' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmctl' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmget' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmread' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`shmwrite' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`socket' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`socketpair' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`stat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`symlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syscall' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sysopen' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`system' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`times' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`truncate' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`umask' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`unlink' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`utime' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`wait' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`waitpid' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'PP' Keyword +'\n' Text + +'For more information about the portability of these functions, see' Text +'\n' Text + +'perlport and other available platform-specific documentation.' Text +'\n' Text + +'.' Text +'Sh' Keyword +' ' Text +'"Alphabetical Listing of Perl Functions"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Subsection' Literal.String +' ' Text +'"Alphabetical Listing of Perl Functions"' Literal.String.Double +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"\\-X \\s-1FILEHANDLE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"-r -w -x -o -R -W -X -O -e -z -s -f -d -l -p -S -b -c -t -u -g -k -T -B -M -A -C"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"-X FILEHANDLE"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"\\-X \\s-1EXPR\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"-X EXPR"' Literal.String.Double +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"\\-X"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"-X"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'A file test, where X is one of the letters listed below. This unary' Text +'\n' Text + +'operator takes one argument, either a filename or a filehandle, and' Text +'\n' Text + +'tests the associated file to see if something is true about it. If the' Text +'\n' Text + +'argument is omitted, tests ' Text +'\\f' Literal.String.Escape +'(CW$_' Text +'\\fR' Literal.String.Escape +', except for ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'t' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', which tests ' Text +'\\s' Literal.String.Escape +'-1STDIN' Text +'\\s' Literal.String.Escape +'0.' Text +'\n' Text + +'Unless otherwise documented, it returns ' Text +'\\f' Literal.String.Escape +'(CW1' Text +'\\fR' Literal.String.Escape +' for true and ' Text +'\\f' Literal.String.Escape +"(CW''" Text +'\\fR' Literal.String.Escape +' for false, or' Text +'\n' Text + +"the undefined value if the file doesn't exist. Despite the funny" Text +'\n' Text + +'names, precedence is the same as any other named unary operator, and' Text +'\n' Text + +'the argument may be parenthesized like any other unary operator. The' Text +'\n' Text + +'operator may be any of:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'4' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -r File is readable by effective uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -w File is writable by effective uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -x File is executable by effective uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -o File is owned by effective uid.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'4' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -R File is readable by real uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -W File is writable by real uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -X File is executable by real uid/gid.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -O File is owned by real uid.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'3' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -e File exists.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -z File has zero size (is empty).' Text +'\n' Text + +'\\&' Literal.String.Escape +' -s File has nonzero size (returns size in bytes).' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'8' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -f File is a plain file.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -d File is a directory.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -l File is a symbolic link.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -p File is a named pipe (FIFO), or Filehandle is a pipe.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -S File is a socket.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -b File is a block special file.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -c File is a character special file.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -t Filehandle is opened to a tty.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'3' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -u File has setuid bit set.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -g File has setgid bit set.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -k File has sticky bit set.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'2' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -T File is an ASCII text file (heuristic guess).' Text +'\n' Text + +'\\&' Literal.String.Escape +' -B File is a "binary" file (opposite of -T).' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'3' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' -M Script start time minus file modification time, in days.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -A Same for access time.' Text +'\n' Text + +'\\&' Literal.String.Escape +' -C Same for inode change time (Unix, may differ for other platforms)' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Example:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'5' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' while (<>) {' Text +'\n' Text + +'\\&' Literal.String.Escape +' chomp;' Text +'\n' Text + +'\\&' Literal.String.Escape +' next unless -f $_; # ignore specials' Text +'\n' Text + +'\\&' Literal.String.Escape +' #...' Text +'\n' Text + +'\\&' Literal.String.Escape +' }' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'The interpretation of the file permission operators ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'r' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'R' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'w' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'W' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'x' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'X' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' is by default based solely on the mode' Text +'\n' Text + +'of the file and the uids and gids of the user. There may be other' Text +'\n' Text + +"reasons you can't actually read, write, or execute the file. Such" Text +'\n' Text + +'reasons may be for example network filesystem access controls, ACLs' Text +'\n' Text + +'(access control lists), read-only filesystems, and unrecognized' Text +'\n' Text + +'executable formats.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Also note that, for the superuser on the local filesystems, the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'r' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'R' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'w' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'W' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' tests always return 1, and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'x' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'X' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' return 1' Text +'\n' Text + +'if any execute bit is set in the mode. Scripts run by the superuser' Text +'\n' Text + +'may thus need to do a ' Text +'\\fI' Literal.String.Escape +'stat()' Text +'\\fR' Literal.String.Escape +' to determine the actual mode of the file,' Text +'\n' Text + +'or temporarily set their effective uid to something else.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If you are using ACLs, there is a pragma called ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`filetest' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' that may' Text +'\n' Text + +'produce more accurate results than the bare ' Text +'\\fI' Literal.String.Escape +'stat()' Text +'\\fR' Literal.String.Escape +' mode bits.' Text +'\n' Text + +'When under the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +"(C`use filetest 'access'" Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' the above-mentioned filetests' Text +'\n' Text + +'will test whether the permission can (not) be granted using the' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\fI' Literal.String.Escape +'access()' Text +'\\fR' Literal.String.Escape +' family of system calls. Also note that the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'x' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'X' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' may' Text +'\n' Text + +'under this pragma return true even if there are no execute permission' Text +'\n' Text + +'bits set (nor any extra execute permission ACLs). This strangeness is' Text +'\n' Text + +"due to the underlying system calls' definitions. Read the" Text +'\n' Text + +'documentation for the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`filetest' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' pragma for more information.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Note that ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'s/a/b/' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' does not do a negated substitution. Saying' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'exp($foo)' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' still works as expected, however' Text +'\\*' Literal.String.Escape +'(--only single letters' Text +'\n' Text + +'following a minus are interpreted as file tests.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'The ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'B' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' switches work as follows. The first block or so of the' Text +'\n' Text + +'file is examined for odd characters such as strange control codes or' Text +'\n' Text + +'characters with the high bit set. If too many strange characters (>30%)' Text +'\n' Text + +"are found, it's a " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'B' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +" file; otherwise it's a " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' file. Also, any file' Text +'\n' Text + +'containing null in the first block is considered a binary file. If ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'or ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'B' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' is used on a filehandle, the current ' Text +'\\s' Literal.String.Escape +'-1IO' Text +'\\s' Literal.String.Escape +'0 buffer is examined' Text +'\n' Text + +'rather than the first block. Both ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'B' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' return true on a null' Text +'\n' Text + +'file, or a file at ' Text +'\\s' Literal.String.Escape +'-1EOF' Text +'\\s' Literal.String.Escape +'0 when testing a filehandle. Because you have to' Text +'\n' Text + +'read a file to do the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' test, on most occasions you want to use a ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'f' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'against the file first, as in ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`next unless ' Text +'\\-' Literal.String.Escape +'f $file && ' Text +'\\-' Literal.String.Escape +'T $file' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If any of the file tests (or either the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`stat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' or ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lstat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' operators) are given' Text +'\n' Text + +'the special filehandle consisting of a solitary underline, then the stat' Text +'\n' Text + +'structure of the previous file test (or stat operator) is used, saving' Text +'\n' Text + +"a system call. (This doesn't work with " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'t' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and you need to remember' Text +'\n' Text + +'that ' Text +'\\fI' Literal.String.Escape +'lstat()' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'l' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' will leave values in the stat structure for the' Text +'\n' Text + +'symbolic link, not the real file.) (Also, if the stat buffer was filled by' Text +'\n' Text + +'an ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`lstat' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' call, ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'T' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\-' Literal.String.Escape +'B' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' will reset it with the results of ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`stat _' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +').' Text +'\n' Text + +'Example:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'1' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' print "Can do.' Text +'\\e' Literal.String.Escape +'n" if -r $a || -w _ || -x _;' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'9' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' stat($filename);' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Readable' Text +'\\e' Literal.String.Escape +'n" if -r _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Writable' Text +'\\e' Literal.String.Escape +'n" if -w _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Executable' Text +'\\e' Literal.String.Escape +'n" if -x _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Setuid' Text +'\\e' Literal.String.Escape +'n" if -u _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Setgid' Text +'\\e' Literal.String.Escape +'n" if -g _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Sticky' Text +'\\e' Literal.String.Escape +'n" if -k _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Text' Text +'\\e' Literal.String.Escape +'n" if -T _;' Text +'\n' Text + +'\\&' Literal.String.Escape +' print "Binary' Text +'\\e' Literal.String.Escape +'n" if -B _;' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"abs \\s-1VALUE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"abs absolute"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"abs VALUE"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"abs"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"abs"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'Returns the absolute value of its argument.' Text +'\n' Text + +'If ' Text +'\\s' Literal.String.Escape +'-1VALUE' Text +'\\s' Literal.String.Escape +'0 is omitted, uses ' Text +'\\f' Literal.String.Escape +'(CW$_' Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"accept \\s-1NEWSOCKET\\s0,GENERICSOCKET"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"accept"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"accept NEWSOCKET,GENERICSOCKET"' Literal.String.Double +'\n' Text + +'Accepts an incoming socket connect, just as the ' Text +'\\fI' Literal.String.Escape +'accept' Text +'\\fR' Literal.String.Escape +'\\|' Literal.String.Escape +'(2) system call' Text +'\n' Text + +'does. Returns the packed address if it succeeded, false otherwise.' Text +'\n' Text + +'See the example in ' Text +'\\*' Literal.String.Escape +'(L"Sockets: Client/Server Communication' Text +'\\*' Literal.String.Escape +'(R" in perlipc.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'On systems that support a close-on-exec flag on files, the flag will' Text +'\n' Text + +'be set for the newly opened file descriptor, as determined by the' Text +'\n' Text + +'value of $^F. See ' Text +'\\*' Literal.String.Escape +'(L"$^F' Text +'\\*' Literal.String.Escape +'(R" in perlvar.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"alarm \\s-1SECONDS\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"alarm SIGALRM timer"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"alarm SECONDS"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"alarm"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"alarm"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'Arranges to have a ' Text +'\\s' Literal.String.Escape +'-1SIGALRM' Text +'\\s' Literal.String.Escape +'0 delivered to this process after the' Text +'\n' Text + +'specified number of wallclock seconds has elapsed. If ' Text +'\\s' Literal.String.Escape +'-1SECONDS' Text +'\\s' Literal.String.Escape +'0 is not' Text +'\n' Text + +'specified, the value stored in ' Text +'\\f' Literal.String.Escape +'(CW$_' Text +'\\fR' Literal.String.Escape +' is used. (On some machines,' Text +'\n' Text + +'unfortunately, the elapsed time may be up to one second less or more' Text +'\n' Text + +'than you specified because of how seconds are counted, and process' Text +'\n' Text + +'scheduling may delay the delivery of the signal even further.)' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Only one timer may be counting at once. Each call disables the' Text +'\n' Text + +'previous timer, and an argument of ' Text +'\\f' Literal.String.Escape +'(CW0' Text +'\\fR' Literal.String.Escape +' may be supplied to cancel the' Text +'\n' Text + +'previous timer without starting a new one. The returned value is the' Text +'\n' Text + +'amount of time remaining on the previous timer.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +"For delays of finer granularity than one second, you may use Perl's" Text +'\n' Text + +'four-argument version of ' Text +'\\fI' Literal.String.Escape +'select()' Text +'\\fR' Literal.String.Escape +' leaving the first three arguments' Text +'\n' Text + +'undefined, or you might be able to use the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`syscall' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' interface to' Text +'\n' Text + +'access ' Text +'\\fI' Literal.String.Escape +'setitimer' Text +'\\fR' Literal.String.Escape +'\\|' Literal.String.Escape +'(2) if your system supports it. The Time::HiRes' Text +'\n' Text + +'module (from ' Text +'\\s' Literal.String.Escape +'-1CPAN' Text +'\\s' Literal.String.Escape +'0, and starting from Perl 5.8 part of the standard' Text +'\n' Text + +'distribution) may also prove useful.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'It is usually a mistake to intermix ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`alarm' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sleep' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' calls.' Text +'\n' Text + +'(' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`sleep' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' may be internally implemented in your system with ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`alarm' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +')' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If you want to use ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`alarm' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' to time out a system call you need to use an' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'/' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`die' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +" pair. You can't rely on the alarm causing the system call to" Text +'\n' Text + +'fail with ' Text +'\\f' Literal.String.Escape +'(CW$!' Text +'\\fR' Literal.String.Escape +' set to ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`EINTR' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' because Perl sets up signal handlers to' Text +'\n' Text + +'restart system calls on some systems. Using ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'/' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`die' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' always works,' Text +'\n' Text + +'modulo the caveats given in ' Text +'\\*' Literal.String.Escape +'(L"Signals' Text +'\\*' Literal.String.Escape +'(R" in perlipc.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'13' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' eval {' Text +'\n' Text + +'\\&' Literal.String.Escape +' local $SIG{ALRM} = sub { die "alarm' Text +'\\e' Literal.String.Escape +'n" }; # NB: ' Text +'\\e' Literal.String.Escape +'n required' Text +'\n' Text + +'\\&' Literal.String.Escape +' alarm $timeout;' Text +'\n' Text + +'\\&' Literal.String.Escape +' $nread = sysread SOCKET, $buffer, $size;' Text +'\n' Text + +'\\&' Literal.String.Escape +' alarm 0;' Text +'\n' Text + +'\\&' Literal.String.Escape +' };' Text +'\n' Text + +'\\&' Literal.String.Escape +' if ($@) {' Text +'\n' Text + +'\\&' Literal.String.Escape +' die unless $@ eq "alarm' Text +'\\e' Literal.String.Escape +'n"; # propagate unexpected errors' Text +'\n' Text + +'\\&' Literal.String.Escape +' # timed out' Text +'\n' Text + +'\\&' Literal.String.Escape +' }' Text +'\n' Text + +'\\&' Literal.String.Escape +' else {' Text +'\n' Text + +'\\&' Literal.String.Escape +" # didn't" Text +'\n' Text + +'\\&' Literal.String.Escape +' }' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'For more information see perlipc.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"atan2 Y,X"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"atan2 arctangent tan tangent"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"atan2 Y,X"' Literal.String.Double +'\n' Text + +'Returns the arctangent of Y/X in the range ' Text +'\\-' Literal.String.Escape +'PI to ' Text +'\\s' Literal.String.Escape +'-1PI' Text +'\\s' Literal.String.Escape +'0.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'For the tangent operation, you may use the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`Math::Trig::tan' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'function, or use the familiar relation:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'1' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' sub tan { sin($_[0]) / cos($_[0]) }' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Note that atan2(0, 0) is not well' Text +'\\-' Literal.String.Escape +'defined.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"bind \\s-1SOCKET\\s0,NAME"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"bind"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"bind SOCKET,NAME"' Literal.String.Double +'\n' Text + +'Binds a network address to a socket, just as the bind system call' Text +'\n' Text + +'does. Returns true if it succeeded, false otherwise. ' Text +'\\s' Literal.String.Escape +'-1NAME' Text +'\\s' Literal.String.Escape +'0 should be a' Text +'\n' Text + +'packed address of the appropriate type for the socket. See the examples in' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\*' Literal.String.Escape +'(L"Sockets: Client/Server Communication' Text +'\\*' Literal.String.Escape +'(R" in perlipc.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"binmode \\s-1FILEHANDLE\\s0, \\s-1LAYER\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"binmode binary text DOS Windows"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"binmode FILEHANDLE, LAYER"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"binmode \\s-1FILEHANDLE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"binmode FILEHANDLE"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'Arranges for ' Text +'\\s' Literal.String.Escape +'-1FILEHANDLE' Text +'\\s' Literal.String.Escape +'0 to be read or written in ' Text +'\\*' Literal.String.Escape +'(L"binary' Text +'\\*' Literal.String.Escape +'(R" or ' Text +'\\*' Literal.String.Escape +'(L"text' Text +'\\*' Literal.String.Escape +'(R"' Text +'\n' Text + +'mode on systems where the run-time libraries distinguish between' Text +'\n' Text + +'binary and text files. If ' Text +'\\s' Literal.String.Escape +'-1FILEHANDLE' Text +'\\s' Literal.String.Escape +'0 is an expression, the value is' Text +'\n' Text + +'taken as the name of the filehandle. Returns true on success,' Text +'\n' Text + +'otherwise it returns ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`undef' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' and sets ' Text +'\\f' Literal.String.Escape +'(CW$!' Text +'\\fR' Literal.String.Escape +' (errno).' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'On some systems (in general, ' Text +'\\s' Literal.String.Escape +'-1DOS' Text +'\\s' Literal.String.Escape +'0 and Windows-based systems) ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +'\n' Text + +"is necessary when you're not working with a text file. For the sake" Text +'\n' Text + +'of portability it is a good idea to always use it when appropriate,' Text +'\n' Text + +"and to never use it when it isn't appropriate. Also, people can" Text +'\n' Text + +'set their I/O to be by default ' Text +'\\s' Literal.String.Escape +'-1UTF' Text +'\\-' Literal.String.Escape +'8' Text +'\\s' Literal.String.Escape +'0 encoded Unicode, not bytes.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'In other words: regardless of platform, use ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' on binary data,' Text +'\n' Text + +'like for example images.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If ' Text +'\\s' Literal.String.Escape +'-1LAYER' Text +'\\s' Literal.String.Escape +'0 is present it is a single string, but may contain multiple' Text +'\n' Text + +'directives. The directives alter the behaviour of the file handle.' Text +'\n' Text + +'When ' Text +'\\s' Literal.String.Escape +'-1LAYER' Text +'\\s' Literal.String.Escape +'0 is present using binmode on text file makes sense.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If ' Text +'\\s' Literal.String.Escape +'-1LAYER' Text +'\\s' Literal.String.Escape +'0 is omitted or specified as ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:raw' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' the filehandle is made' Text +'\n' Text + +'suitable for passing binary data. This includes turning off possible ' Text +'\\s' Literal.String.Escape +'-1CRLF' Text +'\\s' Literal.String.Escape +'0' Text +'\n' Text + +'translation and marking it as bytes (as opposed to Unicode characters).' Text +'\n' Text + +'Note that, despite what may be implied in ' Text +'\\fI' Literal.String.Escape +'\\*' Literal.String.Escape +'(L"Programming Perl' Text +'\\*' Literal.String.Escape +'(R"' Text +'\\fR' Literal.String.Escape +' (the' Text +'\n' Text + +'Camel) or elsewhere, ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:raw' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' is ' Text +'\\fI' Literal.String.Escape +'not' Text +'\\fR' Literal.String.Escape +' the simply inverse of ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:crlf' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'\\&' Literal.String.Escape +'\\*' Literal.String.Escape +'(-- other layers which would affect binary nature of the stream are' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\fI' Literal.String.Escape +'also' Text +'\\fR' Literal.String.Escape +' disabled. See PerlIO, perlrun and the discussion about the' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\s' Literal.String.Escape +'-1PERLIO' Text +'\\s' Literal.String.Escape +'0 environment variable.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'The ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:bytes' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:crlf' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:utf8' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and any other directives of the' Text +'\n' Text + +'form ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:...' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', are called I/O ' Text +'\\fI' Literal.String.Escape +'layers' Text +'\\fR' Literal.String.Escape +'. The ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`open' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' pragma can be used to' Text +'\n' Text + +'establish default I/O layers. See open.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'\\&' Literal.String.Escape +'\\fI' Literal.String.Escape +'The ' Text +'\\s' Literal.String.Escape +'-1LAYER' Text +'\\s' Literal.String.Escape +'0 parameter of the ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fI' Literal.String.Escape +' function is described as ' Text +'\\*' Literal.String.Escape +'(L"' Text +'\\s' Literal.String.Escape +'-1DISCIPLINE' Text +'\\s' Literal.String.Escape +'0' Text +'\\*' Literal.String.Escape +'(R"' Text +'\n' Text + +'in ' Text +'\\*' Literal.String.Escape +'(L"Programming Perl, 3rd Edition' Text +'\\*' Literal.String.Escape +'(R". However, since the publishing of this' Text +'\n' Text + +'book, by many known as ' Text +'\\*' Literal.String.Escape +'(L"Camel ' Text +'\\s' Literal.String.Escape +'-1III' Text +'\\s' Literal.String.Escape +'0' Text +'\\*' Literal.String.Escape +'(R", the consensus of the naming of this' Text +'\n' Text + +'functionality has moved from ' Text +'\\*' Literal.String.Escape +'(L"discipline' Text +'\\*' Literal.String.Escape +'(R" to ' Text +'\\*' Literal.String.Escape +'(L"layer' Text +'\\*' Literal.String.Escape +'(R". All documentation' Text +'\n' Text + +'of this version of Perl therefore refers to ' Text +'\\*' Literal.String.Escape +'(L"layers' Text +'\\*' Literal.String.Escape +'(R" rather than to' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\*' Literal.String.Escape +'(L"disciplines' Text +'\\*' Literal.String.Escape +'(R". Now back to the regularly scheduled documentation...' Text +'\\fR' Literal.String.Escape +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'To mark ' Text +'\\s' Literal.String.Escape +'-1FILEHANDLE' Text +'\\s' Literal.String.Escape +'0 as ' Text +'\\s' Literal.String.Escape +'-1UTF' Text +'\\-' Literal.String.Escape +'8' Text +'\\s' Literal.String.Escape +'0, use ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:utf8' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'In general, ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' should be called after ' Text +'\\fI' Literal.String.Escape +'open()' Text +'\\fR' Literal.String.Escape +' but before any I/O' Text +'\n' Text + +'is done on the filehandle. Calling ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' will normally flush any' Text +'\n' Text + +'pending buffered output data (and perhaps pending input data) on the' Text +'\n' Text + +'handle. An exception to this is the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:encoding' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' layer that' Text +'\n' Text + +'changes the default character encoding of the handle, see open.' Text +'\n' Text + +'The ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:encoding' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' layer sometimes needs to be called in' Text +'\n' Text + +'mid' Text +'\\-' Literal.String.Escape +"stream, and it doesn't flush the stream. The " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:encoding' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'also implicitly pushes on top of itself the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`:utf8' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' layer because' Text +'\n' Text + +'internally Perl will operate on ' Text +'\\s' Literal.String.Escape +'-1UTF' Text +'\\-' Literal.String.Escape +'8' Text +'\\s' Literal.String.Escape +'0 encoded Unicode characters.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'The operating system, device drivers, C libraries, and Perl run-time' Text +'\n' Text + +'system all work together to let the programmer treat a single' Text +'\n' Text + +'character (' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'n' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +') as the line terminator, irrespective of the external' Text +'\n' Text + +'representation. On many operating systems, the native text file' Text +'\n' Text + +'representation matches the internal representation, but on some' Text +'\n' Text + +'platforms the external representation of ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'n' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' is made up of more than' Text +'\n' Text + +'one character.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Mac ' Text +'\\s' Literal.String.Escape +'-1OS' Text +'\\s' Literal.String.Escape +'0, all variants of Unix, and Stream_LF files on ' Text +'\\s' Literal.String.Escape +'-1VMS' Text +'\\s' Literal.String.Escape +'0 use a single' Text +'\n' Text + +'character to end each line in the external representation of text (even' Text +'\n' Text + +'though that single character is ' Text +'\\s' Literal.String.Escape +'-1CARRIAGE' Text +'\\s' Literal.String.Escape +'0 ' Text +'\\s' Literal.String.Escape +'-1RETURN' Text +'\\s' Literal.String.Escape +'0 on Mac ' Text +'\\s' Literal.String.Escape +'-1OS' Text +'\\s' Literal.String.Escape +'0 and ' Text +'\\s' Literal.String.Escape +'-1LINE' Text +'\\s' Literal.String.Escape +'0 ' Text +'\\s' Literal.String.Escape +'-1FEED' Text +'\\s' Literal.String.Escape +'0' Text +'\n' Text + +'on Unix and most ' Text +'\\s' Literal.String.Escape +'-1VMS' Text +'\\s' Literal.String.Escape +'0 files). In other systems like ' Text +'\\s' Literal.String.Escape +'-1OS/2' Text +'\\s' Literal.String.Escape +'0, ' Text +'\\s' Literal.String.Escape +'-1DOS' Text +'\\s' Literal.String.Escape +'0 and the' Text +'\n' Text + +'various flavors of MS-Windows your program sees a ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'n' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' as a simple ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'cJ' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +',' Text +'\n' Text + +"but what's stored in text files are the two characters " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'cM' Text +'\\e' Literal.String.Escape +'cJ' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'. That' Text +'\n' Text + +"means that, if you don't use " Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' on these systems, ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'cM' Text +'\\e' Literal.String.Escape +'cJ' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'sequences on disk will be converted to ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'n' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' on input, and any ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'n' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' in' Text +'\n' Text + +'your program will be converted back to ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'cM' Text +'\\e' Literal.String.Escape +'cJ' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' on output. This is what' Text +'\n' Text + +'you want for text files, but it can be disastrous for binary files.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Another consequence of using ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' (on some systems) is that' Text +'\n' Text + +'special end-of-file markers will be seen as part of the data stream.' Text +'\n' Text + +'For systems from the Microsoft family this means that if your binary' Text +'\n' Text + +'data contains ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`' Text +'\\e' Literal.String.Escape +'cZ' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', the I/O subsystem will regard it as the end of' Text +'\n' Text + +'the file, unless you use ' Text +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'\\&' Literal.String.Escape +'\\fI' Literal.String.Escape +'binmode()' Text +'\\fR' Literal.String.Escape +' is not only important for ' Text +'\\fI' Literal.String.Escape +'readline()' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\fI' Literal.String.Escape +'print()' Text +'\\fR' Literal.String.Escape +' operations,' Text +'\n' Text + +'but also when using ' Text +'\\fI' Literal.String.Escape +'read()' Text +'\\fR' Literal.String.Escape +', ' Text +'\\fI' Literal.String.Escape +'seek()' Text +'\\fR' Literal.String.Escape +', ' Text +'\\fI' Literal.String.Escape +'sysread()' Text +'\\fR' Literal.String.Escape +', ' Text +'\\fI' Literal.String.Escape +'syswrite()' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\fI' Literal.String.Escape +'tell()' Text +'\\fR' Literal.String.Escape +'\n' Text + +'(see perlport for more details). See the ' Text +'\\f' Literal.String.Escape +'(CW$/' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`$' Text +'\\e' Literal.String.Escape +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' variables' Text +'\n' Text + +'in perlvar for how to manually set your input and output' Text +'\n' Text + +'line-termination sequences.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"bless \\s-1REF\\s0,CLASSNAME"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"bless"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"bless REF,CLASSNAME"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"bless \\s-1REF\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"bless REF"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'This function tells the thingy referenced by ' Text +'\\s' Literal.String.Escape +'-1REF' Text +'\\s' Literal.String.Escape +'0 that it is now an object' Text +'\n' Text + +'in the ' Text +'\\s' Literal.String.Escape +'-1CLASSNAME' Text +'\\s' Literal.String.Escape +'0 package. If ' Text +'\\s' Literal.String.Escape +'-1CLASSNAME' Text +'\\s' Literal.String.Escape +'0 is omitted, the current package' Text +'\n' Text + +'is used. Because a ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`bless' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' is often the last thing in a constructor,' Text +'\n' Text + +'it returns the reference for convenience. Always use the two-argument' Text +'\n' Text + +'version if a derived class might inherit the function doing the blessing.' Text +'\n' Text + +'See perltoot and perlobj for more about the blessing (and blessings)' Text +'\n' Text + +'of objects.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Consider always blessing objects in CLASSNAMEs that are mixed case.' Text +'\n' Text + +'Namespaces with all lowercase names are considered reserved for' Text +'\n' Text + +'Perl pragmata. Builtin types have all uppercase names. To prevent' Text +'\n' Text + +'confusion, you may wish to avoid such package names as well. Make sure' Text +'\n' Text + +'that ' Text +'\\s' Literal.String.Escape +'-1CLASSNAME' Text +'\\s' Literal.String.Escape +'0 is a true value.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'See ' Text +'\\*' Literal.String.Escape +'(L"Perl Modules' Text +'\\*' Literal.String.Escape +'(R" in perlmod.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"caller \\s-1EXPR\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"caller call stack stack stack trace"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"caller EXPR"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"caller"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"caller"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'Returns the context of the current subroutine call. In scalar context,' Text +'\n' Text + +"returns the caller's package name if there is a caller, that is, if" Text +'\n' Text + +"we're in a subroutine or " Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' or ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`require' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', and the undefined value' Text +'\n' Text + +'otherwise. In list context, returns' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'1' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' ($package, $filename, $line) = caller;' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'With ' Text +'\\s' Literal.String.Escape +'-1EXPR' Text +'\\s' Literal.String.Escape +'0, it returns some extra information that the debugger uses to' Text +'\n' Text + +'print a stack trace. The value of ' Text +'\\s' Literal.String.Escape +'-1EXPR' Text +'\\s' Literal.String.Escape +'0 indicates how many call frames' Text +'\n' Text + +'to go back before the current one.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'2' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' ($package, $filename, $line, $subroutine, $hasargs,' Text +'\n' Text + +'\\&' Literal.String.Escape +' $wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i);' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Here ' Text +'\\f' Literal.String.Escape +'(CW$subroutine' Text +'\\fR' Literal.String.Escape +' may be ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`(eval)' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' if the frame is not a subroutine' Text +'\n' Text + +'call, but an ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'. In such a case additional elements ' Text +'\\f' Literal.String.Escape +'(CW$evaltext' Text +'\\fR' Literal.String.Escape +' and' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW$is_require' Text +'\\fR' Literal.String.Escape +' are set: ' Text +'\\f' Literal.String.Escape +'(CW$is_require' Text +'\\fR' Literal.String.Escape +' is true if the frame is created by a' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`require' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' or ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' statement, ' Text +'\\f' Literal.String.Escape +'(CW$evaltext' Text +'\\fR' Literal.String.Escape +' contains the text of the' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval EXPR' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' statement. In particular, for an ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval BLOCK' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' statement,' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW$filename' Text +'\\fR' Literal.String.Escape +' is ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`(eval)' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +', but ' Text +'\\f' Literal.String.Escape +'(CW$evaltext' Text +'\\fR' Literal.String.Escape +' is undefined. (Note also that' Text +'\n' Text + +'each ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`use' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' statement creates a ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`require' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' frame inside an ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`eval EXPR' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'\n' Text + +'frame.) ' Text +'\\f' Literal.String.Escape +'(CW$subroutine' Text +'\\fR' Literal.String.Escape +' may also be ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`(unknown)' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' if this particular' Text +'\n' Text + +'subroutine happens to have been deleted from the symbol table.' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW$hasargs' Text +'\\fR' Literal.String.Escape +' is true if a new instance of ' Text +'\\f' Literal.String.Escape +'(CW@_' Text +'\\fR' Literal.String.Escape +' was set up for the frame.' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW$hints' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW$bitmask' Text +'\\fR' Literal.String.Escape +' contain pragmatic hints that the caller was' Text +'\n' Text + +'compiled with. The ' Text +'\\f' Literal.String.Escape +'(CW$hints' Text +'\\fR' Literal.String.Escape +' and ' Text +'\\f' Literal.String.Escape +'(CW$bitmask' Text +'\\fR' Literal.String.Escape +' values are subject to change' Text +'\n' Text + +'between versions of Perl, and are not meant for external use.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Furthermore, when called from within the ' Text +'\\s' Literal.String.Escape +'-1DB' Text +'\\s' Literal.String.Escape +'0 package, caller returns more' Text +'\n' Text + +'detailed information: it sets the list variable ' Text +'\\f' Literal.String.Escape +'(CW@DB::args' Text +'\\fR' Literal.String.Escape +' to be the' Text +'\n' Text + +'arguments with which the subroutine was invoked.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'Be aware that the optimizer might have optimized call frames away before' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`caller' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' had a chance to get the information. That means that ' Text +'\\f' Literal.String.Escape +'(CWcaller(N)' Text +'\\fR' Literal.String.Escape +'\n' Text + +'might not return information about the call frame you expect it do, for' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`N > 1' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'. In particular, ' Text +'\\f' Literal.String.Escape +'(CW@DB::args' Text +'\\fR' Literal.String.Escape +' might have information from the' Text +'\n' Text + +'previous time ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`caller' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' was called.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chdir \\s-1EXPR\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"chdir cd"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chdir EXPR"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chdir \\s-1FILEHANDLE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chdir FILEHANDLE"' Literal.String.Double +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chdir \\s-1DIRHANDLE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chdir DIRHANDLE"' Literal.String.Double +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chdir"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chdir"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'Changes the working directory to ' Text +'\\s' Literal.String.Escape +'-1EXPR' Text +'\\s' Literal.String.Escape +'0, if possible. If ' Text +'\\s' Literal.String.Escape +'-1EXPR' Text +'\\s' Literal.String.Escape +'0 is omitted,' Text +'\n' Text + +'changes to the directory specified by ' Text +'\\f' Literal.String.Escape +'(CW$ENV{HOME}' Text +'\\fR' Literal.String.Escape +', if set; if not,' Text +'\n' Text + +'changes to the directory specified by ' Text +'\\f' Literal.String.Escape +'(CW$ENV{LOGDIR}' Text +'\\fR' Literal.String.Escape +'. (Under ' Text +'\\s' Literal.String.Escape +'-1VMS' Text +'\\s' Literal.String.Escape +'0, the' Text +'\n' Text + +'variable ' Text +'\\f' Literal.String.Escape +'(CW$ENV{SYS$LOGIN}' Text +'\\fR' Literal.String.Escape +' is also checked, and used if it is set.) If' Text +'\n' Text + +'neither is set, ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`chdir' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' does nothing. It returns true upon success,' Text +'\n' Text + +'false otherwise. See the example under ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`die' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'On systems that support fchdir, you might pass a file handle or' Text +'\n' Text + +"directory handle as argument. On systems that don't support fchdir," Text +'\n' Text + +'passing handles produces a fatal error at run time.' Text +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chmod \\s-1LIST\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"chmod permission mode"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chmod LIST"' Literal.String.Double +'\n' Text + +'Changes the permissions of a list of files. The first element of the' Text +'\n' Text + +'list must be the numerical mode, which should probably be an octal' Text +'\n' Text + +'number, and which definitely should ' Text +'\\fI' Literal.String.Escape +'not' Text +'\\fR' Literal.String.Escape +' be a string of octal digits:' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW0644' Text +'\\fR' Literal.String.Escape +' is okay, ' Text +'\\f' Literal.String.Escape +"(CW'0644'" Text +'\\fR' Literal.String.Escape +' is not. Returns the number of files' Text +'\n' Text + +'successfully changed. See also ' Text +'\\*' Literal.String.Escape +'(L"oct' Text +'\\*' Literal.String.Escape +'(R", if all you have is a string.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'6' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +" $cnt = chmod 0755, 'foo', 'bar';" Text +'\n' Text + +'\\&' Literal.String.Escape +' chmod 0755, @executables;' Text +'\n' Text + +'\\&' Literal.String.Escape +" $mode = '0644'; chmod $mode, 'foo'; # !!! sets mode to" Text +'\n' Text + +'\\&' Literal.String.Escape +' # --w----r-T' Text +'\n' Text + +'\\&' Literal.String.Escape +" $mode = '0644'; chmod oct($mode), 'foo'; # this is better" Text +'\n' Text + +'\\&' Literal.String.Escape +" $mode = 0644; chmod $mode, 'foo'; # this is best" Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'On systems that support fchmod, you might pass file handles among the' Text +'\n' Text + +"files. On systems that don't support fchmod, passing file handles" Text +'\n' Text + +'produces a fatal error at run time.' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'3' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' open(my $fh, "<", "foo");' Text +'\n' Text + +'\\&' Literal.String.Escape +' my $perm = (stat $fh)[2] & 07777;' Text +'\n' Text + +'\\&' Literal.String.Escape +' chmod($perm | 0600, $fh);' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'You can also import the symbolic ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`S_I*' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' constants from the Fcntl' Text +'\n' Text + +'module:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'1' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +" use Fcntl ':mode';" Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'2' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' chmod S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH, @executables;' Text +'\n' Text + +'\\&' Literal.String.Escape +' # This is identical to the chmod 0755 of the above example.' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chomp \\s-1VARIABLE\\s0"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Xref' Literal.String +' ' Text +'"chomp INPUT_RECORD_SEPARATOR $ newline eol"' Literal.String.Double +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chomp VARIABLE"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +' ' Text +'0' Literal.Number +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chomp( \\s-1LIST\\s0 )"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chomp( LIST )"' Literal.String.Double +'\n' Text + +'.' Text +'IP' Keyword +' ' Text +'"chomp"' Literal.String.Double +' ' Text +'8' Literal.Number +'\n' Text + +'.' Text +'IX' Keyword +' ' Text +'Item' Literal.String +' ' Text +'"chomp"' Literal.String.Double +'\n' Text + +'.' Text +'PD' Keyword +'\n' Text + +'This safer version of ' Text +'\\*' Literal.String.Escape +'(L"chop' Text +'\\*' Literal.String.Escape +'(R" removes any trailing string' Text +'\n' Text + +'that corresponds to the current value of ' Text +'\\f' Literal.String.Escape +'(CW$/' Text +'\\fR' Literal.String.Escape +' (also known as' Text +'\n' Text + +'\\&' Literal.String.Escape +'\\f' Literal.String.Escape +'(CW$INPUT_RECORD_SEPARATOR' Text +'\\fR' Literal.String.Escape +' in the ' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`English' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +' module). It returns the total' Text +'\n' Text + +"number of characters removed from all its arguments. It's often used to" Text +'\n' Text + +"remove the newline from the end of an input record when you're worried" Text +'\n' Text + +'that the final record may be missing its newline. When in paragraph' Text +'\n' Text + +'mode (' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`$/ = ""' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +'), it removes all trailing newlines from the string.' Text +'\n' Text + +'When in slurp mode (' Text +'\\f' Literal.String.Escape +'(CW' Text +'\\*' Literal.String.Escape +'(C`$/ = undef' Text +'\\*' Literal.String.Escape +"(C'" Text +'\\fR' Literal.String.Escape +') or fixed-length record mode (' Text +'\\f' Literal.String.Escape +'(CW$/' Text +'\\fR' Literal.String.Escape +' is' Text +'\n' Text + +'a reference to an integer or the like, see perlvar) ' Text +'\\fI' Literal.String.Escape +'chomp()' Text +'\\fR' Literal.String.Escape +" won't" Text +'\n' Text + +'remove anything.' Text +'\n' Text + +'If ' Text +'\\s' Literal.String.Escape +'-1VARIABLE' Text +'\\s' Literal.String.Escape +'0 is omitted, it chomps ' Text +'\\f' Literal.String.Escape +'(CW$_' Text +'\\fR' Literal.String.Escape +'. Example:' Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'.' Text +'Vb' Keyword +' ' Text +'5' Literal.Number +'\n' Text + +'\\&' Literal.String.Escape +' while (<>) {' Text +'\n' Text + +'\\&' Literal.String.Escape +' chomp; # avoid ' Text +'\\e' Literal.String.Escape +'n on last field' Text +'\n' Text + +'\\&' Literal.String.Escape +' @array = split(/:/);' Text +'\n' Text + +'\\&' Literal.String.Escape +' # ...' Text +'\n' Text + +'\\&' Literal.String.Escape +' }' Text +'\n' Text + +'.' Text +'Ve' Keyword +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text + +'If ' Text +'\\s' Literal.String.Escape +'-1VARIABLE' Text +'\\s' Literal.String.Escape +"0 is a hash, it chomps the hash's values, but not its keys." Text +'\n' Text + +'.' Text +'Sp' Keyword +'\n' Text |
