summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man1/perlform.1perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man1/perlform.1perl')
-rw-r--r--upstream/archlinux/man1/perlform.1perl514
1 files changed, 514 insertions, 0 deletions
diff --git a/upstream/archlinux/man1/perlform.1perl b/upstream/archlinux/man1/perlform.1perl
new file mode 100644
index 00000000..4f2bcaad
--- /dev/null
+++ b/upstream/archlinux/man1/perlform.1perl
@@ -0,0 +1,514 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.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
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "PERLFORM 1perl"
+.TH PERLFORM 1perl 2024-02-11 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+perlform \- Perl formats
+.IX Xref "format report chart"
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+Perl has a mechanism to help you generate simple reports and charts. To
+facilitate this, Perl helps you code up your output page close to how it
+will look when it's printed. It can keep track of things like how many
+lines are on a page, what page you're on, when to print page headers,
+etc. Keywords are borrowed from FORTRAN: \fBformat()\fR to declare and \fBwrite()\fR
+to execute; see their entries in perlfunc. Fortunately, the layout is
+much more legible, more like BASIC's PRINT USING statement. Think of it
+as a poor man's \fBnroff\fR\|(1).
+.IX Xref "nroff"
+.PP
+Formats, like packages and subroutines, are declared rather than
+executed, so they may occur at any point in your program. (Usually it's
+best to keep them all together though.) They have their own namespace
+apart from all the other "types" in Perl. This means that if you have a
+function named "Foo", it is not the same thing as having a format named
+"Foo". However, the default name for the format associated with a given
+filehandle is the same as the name of the filehandle. Thus, the default
+format for STDOUT is named "STDOUT", and the default format for filehandle
+TEMP is named "TEMP". They just look the same. They aren't.
+.PP
+Output record formats are declared as follows:
+.PP
+.Vb 3
+\& format NAME =
+\& FORMLIST
+\& .
+.Ve
+.PP
+If the name is omitted, format "STDOUT" is defined. A single "." in
+column 1 is used to terminate a format. FORMLIST consists of a sequence
+of lines, each of which may be one of three types:
+.IP 1. 4
+A comment, indicated by putting a '#' in the first column.
+.IP 2. 4
+A "picture" line giving the format for one output line.
+.IP 3. 4
+An argument line supplying values to plug into the previous picture line.
+.PP
+Picture lines contain output field definitions, intermingled with
+literal text. These lines do not undergo any kind of variable interpolation.
+Field definitions are made up from a set of characters, for starting and
+extending a field to its desired width. This is the complete set of
+characters for field definitions:
+.IX Xref "format, picture line @ ^ < | > # 0 . ... @* ^* ~ ~~"
+.PP
+.Vb 10
+\& @ start of regular field
+\& ^ start of special field
+\& < pad character for left justification
+\& | pad character for centering
+\& > pad character for right justification
+\& # pad character for a right\-justified numeric field
+\& 0 instead of first #: pad number with leading zeroes
+\& . decimal point within a numeric field
+\& ... terminate a text field, show "..." as truncation evidence
+\& @* variable width field for a multi\-line value
+\& ^* variable width field for next line of a multi\-line value
+\& ~ suppress line with all fields empty
+\& ~~ repeat line until all fields are exhausted
+.Ve
+.PP
+Each field in a picture line starts with either "@" (at) or "^" (caret),
+indicating what we'll call, respectively, a "regular" or "special" field.
+The choice of pad characters determines whether a field is textual or
+numeric. The tilde operators are not part of a field. Let's look at
+the various possibilities in detail.
+.SS "Text Fields"
+.IX Xref "format, text field"
+.IX Subsection "Text Fields"
+The length of the field is supplied by padding out the field with multiple
+"<", ">", or "|" characters to specify a non-numeric field with,
+respectively, left justification, right justification, or centering.
+For a regular field, the value (up to the first newline) is taken and
+printed according to the selected justification, truncating excess characters.
+If you terminate a text field with "...", three dots will be shown if
+the value is truncated. A special text field may be used to do rudimentary
+multi-line text block filling; see "Using Fill Mode" for details.
+.PP
+.Vb 7
+\& Example:
+\& format STDOUT =
+\& @<<<<<< @|||||| @>>>>>>
+\& "left", "middle", "right"
+\& .
+\& Output:
+\& left middle right
+.Ve
+.SS "Numeric Fields"
+.IX Xref "# format, numeric field"
+.IX Subsection "Numeric Fields"
+Using "#" as a padding character specifies a numeric field, with
+right justification. An optional "." defines the position of the
+decimal point. With a "0" (zero) instead of the first "#", the
+formatted number will be padded with leading zeroes if necessary.
+A special numeric field is blanked out if the value is undefined.
+If the resulting value would exceed the width specified the field is
+filled with "#" as overflow evidence.
+.PP
+.Vb 7
+\& Example:
+\& format STDOUT =
+\& @### @.### @##.### @### @### ^####
+\& 42, 3.1415, undef, 0, 10000, undef
+\& .
+\& Output:
+\& 42 3.142 0.000 0 ####
+.Ve
+.SS "The Field @* for Variable-Width Multi-Line Text"
+.IX Xref "@*"
+.IX Subsection "The Field @* for Variable-Width Multi-Line Text"
+The field "@*" can be used for printing multi-line, nontruncated
+values; it should (but need not) appear by itself on a line. A final
+line feed is chomped off, but all other characters are emitted verbatim.
+.SS "The Field ^* for Variable-Width One-line-at-a-time Text"
+.IX Xref "^*"
+.IX Subsection "The Field ^* for Variable-Width One-line-at-a-time Text"
+Like "@*", this is a variable-width field. The value supplied must be a
+scalar variable. Perl puts the first line (up to the first "\en") of the
+text into the field, and then chops off the front of the string so that
+the next time the variable is referenced, more of the text can be printed.
+The variable will \fInot\fR be restored.
+.PP
+.Vb 12
+\& Example:
+\& $text = "line 1\enline 2\enline 3";
+\& format STDOUT =
+\& Text: ^*
+\& $text
+\& ~~ ^*
+\& $text
+\& .
+\& Output:
+\& Text: line 1
+\& line 2
+\& line 3
+.Ve
+.SS "Specifying Values"
+.IX Xref "format, specifying values"
+.IX Subsection "Specifying Values"
+The values are specified on the following format line in the same order as
+the picture fields. The expressions providing the values must be
+separated by commas. They are all evaluated in a list context
+before the line is processed, so a single list expression could produce
+multiple list elements. The expressions may be spread out to more than
+one line if enclosed in braces. If so, the opening brace must be the first
+token on the first line. If an expression evaluates to a number with a
+decimal part, and if the corresponding picture specifies that the decimal
+part should appear in the output (that is, any picture except multiple "#"
+characters \fBwithout\fR an embedded "."), the character used for the decimal
+point is determined by the current LC_NUMERIC locale if \f(CW\*(C`use locale\*(C'\fR is in
+effect. This means that, if, for example, the run-time environment happens
+to specify a German locale, "," will be used instead of the default ".". See
+perllocale and "WARNINGS" for more information.
+.SS "Using Fill Mode"
+.IX Xref "format, fill mode"
+.IX Subsection "Using Fill Mode"
+On text fields the caret enables a kind of fill mode. Instead of an
+arbitrary expression, the value supplied must be a scalar variable
+that contains a text string. Perl puts the next portion of the text into
+the field, and then chops off the front of the string so that the next time
+the variable is referenced, more of the text can be printed. (Yes, this
+means that the variable itself is altered during execution of the \fBwrite()\fR
+call, and is not restored.) The next portion of text is determined by
+a crude line-breaking algorithm. You may use the carriage return character
+(\f(CW\*(C`\er\*(C'\fR) to force a line break. You can change which characters are legal
+to break on by changing the variable \f(CW$:\fR (that's
+\&\f(CW$FORMAT_LINE_BREAK_CHARACTERS\fR if you're using the English module) to a
+list of the desired characters.
+.PP
+Normally you would use a sequence of fields in a vertical stack associated
+with the same scalar variable to print out a block of text. You might wish
+to end the final field with the text "...", which will appear in the output
+if the text was too long to appear in its entirety.
+.SS "Suppressing Lines Where All Fields Are Void"
+.IX Xref "format, suppressing lines"
+.IX Subsection "Suppressing Lines Where All Fields Are Void"
+Using caret fields can produce lines where all fields are blank. You can
+suppress such lines by putting a "~" (tilde) character anywhere in the
+line. The tilde will be translated to a space upon output.
+.SS "Repeating Format Lines"
+.IX Xref "format, repeating lines"
+.IX Subsection "Repeating Format Lines"
+If you put two contiguous tilde characters "~~" anywhere into a line,
+the line will be repeated until all the fields on the line are exhausted,
+i.e. undefined. For special (caret) text fields this will occur sooner or
+later, but if you use a text field of the at variety, the expression you
+supply had better not give the same value every time forever! (\f(CWshift(@f)\fR
+is a simple example that would work.) Don't use a regular (at) numeric
+field in such lines, because it will never go blank.
+.SS "Top of Form Processing"
+.IX Xref "format, top of form top header"
+.IX Subsection "Top of Form Processing"
+Top-of-form processing is by default handled by a format with the
+same name as the current filehandle with "_TOP" concatenated to it.
+It's triggered at the top of each page. See "write" in perlfunc.
+.PP
+Examples:
+.PP
+.Vb 10
+\& # a report on the /etc/passwd file
+\& format STDOUT_TOP =
+\& Passwd File
+\& Name Login Office Uid Gid Home
+\& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\& .
+\& format STDOUT =
+\& @<<<<<<<<<<<<<<<<<< @||||||| @<<<<<<@>>>> @>>>> @<<<<<<<<<<<<<<<<<
+\& $name, $login, $office,$uid,$gid, $home
+\& .
+\&
+\&
+\& # a report from a bug report form
+\& format STDOUT_TOP =
+\& Bug Reports
+\& @<<<<<<<<<<<<<<<<<<<<<<< @||| @>>>>>>>>>>>>>>>>>>>>>>>
+\& $system, $%, $date
+\& \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-
+\& .
+\& format STDOUT =
+\& Subject: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $subject
+\& Index: @<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $index, $description
+\& Priority: @<<<<<<<<<< Date: @<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $priority, $date, $description
+\& From: @<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $from, $description
+\& Assigned to: @<<<<<<<<<<<<<<<<<<<<<< ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $programmer, $description
+\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $description
+\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $description
+\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $description
+\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $description
+\& ~ ^<<<<<<<<<<<<<<<<<<<<<<<...
+\& $description
+\& .
+.Ve
+.PP
+It is possible to intermix \fBprint()\fRs with \fBwrite()\fRs on the same output
+channel, but you'll have to handle \f(CW\*(C`$\-\*(C'\fR (\f(CW$FORMAT_LINES_LEFT\fR)
+yourself.
+.SS "Format Variables"
+.IX Xref "format variables format, variables"
+.IX Subsection "Format Variables"
+The current format name is stored in the variable \f(CW$~\fR (\f(CW$FORMAT_NAME\fR),
+and the current top of form format name is in \f(CW$^\fR (\f(CW$FORMAT_TOP_NAME\fR).
+The current output page number is stored in \f(CW$%\fR (\f(CW$FORMAT_PAGE_NUMBER\fR),
+and the number of lines on the page is in \f(CW$=\fR (\f(CW$FORMAT_LINES_PER_PAGE\fR).
+Whether to autoflush output on this handle is stored in \f(CW$|\fR
+(\f(CW$OUTPUT_AUTOFLUSH\fR). The string output before each top of page (except
+the first) is stored in \f(CW$^L\fR (\f(CW$FORMAT_FORMFEED\fR). These variables are
+set on a per-filehandle basis, so you'll need to \fBselect()\fR into a different
+one to affect them:
+.PP
+.Vb 4
+\& select((select(OUTF),
+\& $~ = "My_Other_Format",
+\& $^ = "My_Top_Format"
+\& )[0]);
+.Ve
+.PP
+Pretty ugly, eh? It's a common idiom though, so don't be too surprised
+when you see it. You can at least use a temporary variable to hold
+the previous filehandle: (this is a much better approach in general,
+because not only does legibility improve, you now have an intermediary
+stage in the expression to single-step the debugger through):
+.PP
+.Vb 4
+\& $ofh = select(OUTF);
+\& $~ = "My_Other_Format";
+\& $^ = "My_Top_Format";
+\& select($ofh);
+.Ve
+.PP
+If you use the English module, you can even read the variable names:
+.PP
+.Vb 5
+\& use English;
+\& $ofh = select(OUTF);
+\& $FORMAT_NAME = "My_Other_Format";
+\& $FORMAT_TOP_NAME = "My_Top_Format";
+\& select($ofh);
+.Ve
+.PP
+But you still have those funny \fBselect()\fRs. So just use the FileHandle
+module. Now, you can access these special variables using lowercase
+method names instead:
+.PP
+.Vb 3
+\& use FileHandle;
+\& format_name OUTF "My_Other_Format";
+\& format_top_name OUTF "My_Top_Format";
+.Ve
+.PP
+Much better!
+.SH NOTES
+.IX Header "NOTES"
+Because the values line may contain arbitrary expressions (for at fields,
+not caret fields), you can farm out more sophisticated processing
+to other functions, like \fBsprintf()\fR or one of your own. For example:
+.PP
+.Vb 4
+\& format Ident =
+\& @<<<<<<<<<<<<<<<
+\& &commify($n)
+\& .
+.Ve
+.PP
+To get a real at or caret into the field, do this:
+.PP
+.Vb 4
+\& format Ident =
+\& I have an @ here.
+\& "@"
+\& .
+.Ve
+.PP
+To center a whole line of text, do something like this:
+.PP
+.Vb 4
+\& format Ident =
+\& @|||||||||||||||||||||||||||||||||||||||||||||||
+\& "Some text line"
+\& .
+.Ve
+.PP
+There is no builtin way to say "float this to the right hand side
+of the page, however wide it is." You have to specify where it goes.
+The truly desperate can generate their own format on the fly, based
+on the current number of columns, and then \fBeval()\fR it:
+.PP
+.Vb 9
+\& $format = "format STDOUT = \en"
+\& . \*(Aq^\*(Aq . \*(Aq<\*(Aq x $cols . "\en"
+\& . \*(Aq$entry\*(Aq . "\en"
+\& . "\et^" . "<" x ($cols\-8) . "~~\en"
+\& . \*(Aq$entry\*(Aq . "\en"
+\& . ".\en";
+\& print $format if $Debugging;
+\& eval $format;
+\& die $@ if $@;
+.Ve
+.PP
+Which would generate a format looking something like this:
+.PP
+.Vb 6
+\& format STDOUT =
+\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+\& $entry
+\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
+\& $entry
+\& .
+.Ve
+.PP
+Here's a little program that's somewhat like \fBfmt\fR\|(1):
+.PP
+.Vb 3
+\& format =
+\& ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ~~
+\& $_
+\&
+\& .
+\&
+\& $/ = \*(Aq\*(Aq;
+\& while (<>) {
+\& s/\es*\en\es*/ /g;
+\& write;
+\& }
+.Ve
+.SS Footers
+.IX Xref "format, footer footer"
+.IX Subsection "Footers"
+While \f(CW$FORMAT_TOP_NAME\fR contains the name of the current header format,
+there is no corresponding mechanism to automatically do the same thing
+for a footer. Not knowing how big a format is going to be until you
+evaluate it is one of the major problems. It's on the TODO list.
+.PP
+Here's one strategy: If you have a fixed-size footer, you can get footers
+by checking \f(CW$FORMAT_LINES_LEFT\fR before each \fBwrite()\fR and print the footer
+yourself if necessary.
+.PP
+Here's another strategy: Open a pipe to yourself, using \f(CW\*(C`open(MYSELF, "|\-")\*(C'\fR
+(see "open" in perlfunc) and always \fBwrite()\fR to MYSELF instead of STDOUT.
+Have your child process massage its STDIN to rearrange headers and footers
+however you like. Not very convenient, but doable.
+.SS "Accessing Formatting Internals"
+.IX Xref "format, internals"
+.IX Subsection "Accessing Formatting Internals"
+For low-level access to the formatting mechanism, you may use \fBformline()\fR
+and access \f(CW$^A\fR (the \f(CW$ACCUMULATOR\fR variable) directly.
+.PP
+For example:
+.PP
+.Vb 3
+\& $str = formline <<\*(AqEND\*(Aq, 1,2,3;
+\& @<<< @||| @>>>
+\& END
+\&
+\& print "Wow, I just stored \*(Aq$^A\*(Aq in the accumulator!\en";
+.Ve
+.PP
+Or to make an \fBswrite()\fR subroutine, which is to \fBwrite()\fR what \fBsprintf()\fR
+is to \fBprintf()\fR, do this:
+.PP
+.Vb 8
+\& use Carp;
+\& sub swrite {
+\& croak "usage: swrite PICTURE ARGS" unless @_;
+\& my $format = shift;
+\& $^A = "";
+\& formline($format,@_);
+\& return $^A;
+\& }
+\&
+\& $string = swrite(<<\*(AqEND\*(Aq, 1, 2, 3);
+\& Check me out
+\& @<<< @||| @>>>
+\& END
+\& print $string;
+.Ve
+.SH WARNINGS
+.IX Header "WARNINGS"
+The lone dot that ends a format can also prematurely end a mail
+message passing through a misconfigured Internet mailer (and based on
+experience, such misconfiguration is the rule, not the exception). So
+when sending format code through mail, you should indent it so that
+the format-ending dot is not on the left margin; this will prevent
+SMTP cutoff.
+.PP
+Lexical variables (declared with "my") are not visible within a
+format unless the format is declared within the scope of the lexical
+variable.
+.PP
+If a program's environment specifies an LC_NUMERIC locale and \f(CW\*(C`use
+locale\*(C'\fR is in effect when the format is declared, the locale is used
+to specify the decimal point character in formatted output. Formatted
+output cannot be controlled by \f(CW\*(C`use locale\*(C'\fR at the time when \fBwrite()\fR
+is called. See perllocale for further discussion of locale handling.
+.PP
+Within strings that are to be displayed in a fixed-length text field,
+each control character is substituted by a space. (But remember the
+special meaning of \f(CW\*(C`\er\*(C'\fR when using fill mode.) This is done to avoid
+misalignment when control characters "disappear" on some output media.