summaryrefslogtreecommitdiffstats
path: root/upstream/archlinux/man3/PerlIO::via.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/archlinux/man3/PerlIO::via.3perl')
-rw-r--r--upstream/archlinux/man3/PerlIO::via.3perl298
1 files changed, 298 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/PerlIO::via.3perl b/upstream/archlinux/man3/PerlIO::via.3perl
new file mode 100644
index 00000000..fa0addc6
--- /dev/null
+++ b/upstream/archlinux/man3/PerlIO::via.3perl
@@ -0,0 +1,298 @@
+.\" -*- 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 "PerlIO::via 3perl"
+.TH PerlIO::via 3perl 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
+PerlIO::via \- Helper class for PerlIO layers implemented in perl
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 2
+\& use PerlIO::via::Layer;
+\& open($fh,"<:via(Layer)",...);
+\&
+\& use Some::Other::Package;
+\& open($fh,">:via(Some::Other::Package)",...);
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+The PerlIO::via module allows you to develop PerlIO layers in Perl, without
+having to go into the nitty gritty of programming C with XS as the interface
+to Perl.
+.PP
+One example module, PerlIO::via::QuotedPrint, is included with Perl
+5.8.0, and more example modules are available from CPAN, such as
+PerlIO::via::StripHTML and PerlIO::via::Base64. The
+PerlIO::via::StripHTML module for instance, allows you to say:
+.PP
+.Vb 3
+\& use PerlIO::via::StripHTML;
+\& open( my $fh, "<:via(StripHTML)", "index.html" );
+\& my @line = <$fh>;
+.Ve
+.PP
+to obtain the text of an HTML-file in an array with all the HTML-tags
+automagically removed.
+.PP
+Please note that if the layer is created in the PerlIO::via:: namespace, it
+does \fBnot\fR have to be fully qualified. The PerlIO::via module will prefix
+the PerlIO::via:: namespace if the specified modulename does not exist as a
+fully qualified module name.
+.SH "EXPECTED METHODS"
+.IX Header "EXPECTED METHODS"
+To create a Perl module that implements a PerlIO layer in Perl (as opposed to
+in C using XS as the interface to Perl), you need to supply some of the
+following subroutines. It is recommended to create these Perl modules in the
+PerlIO::via:: namespace, so that they can easily be located on CPAN and use
+the default namespace feature of the PerlIO::via module itself.
+.PP
+Please note that this is an area of recent development in Perl and that the
+interface described here is therefore still subject to change (and hopefully
+will have better documentation and more examples).
+.PP
+In the method descriptions below \fR\f(CI$fh\fR\fI\fR will be
+a reference to a glob which can be treated as a perl file handle.
+It refers to the layer below. \fI\fR\f(CI$fh\fR\fI\fR is not passed if the layer
+is at the bottom of the stack, for this reason and to maintain
+some level of "compatibility" with TIEHANDLE classes it is passed last.
+.ie n .IP $class\->PUSHED([$mode,[$fh]]) 4
+.el .IP \f(CW$class\fR\->PUSHED([$mode,[$fh]]) 4
+.IX Item "$class->PUSHED([$mode,[$fh]])"
+Should return an object or the class, or \-1 on failure. (Compare
+TIEHANDLE.) The arguments are an optional mode string ("r", "w",
+"w+", ...) and a filehandle for the PerlIO layer below. Mandatory.
+.Sp
+When the layer is pushed as part of an \f(CW\*(C`open\*(C'\fR call, \f(CW\*(C`PUSHED\*(C'\fR will be called
+\&\fIbefore\fR the actual open occurs, whether that be via \f(CW\*(C`OPEN\*(C'\fR, \f(CW\*(C`SYSOPEN\*(C'\fR,
+\&\f(CW\*(C`FDOPEN\*(C'\fR or by letting a lower layer do the open.
+.ie n .IP $obj\->POPPED([$fh]) 4
+.el .IP \f(CW$obj\fR\->POPPED([$fh]) 4
+.IX Item "$obj->POPPED([$fh])"
+Optional \- called when the layer is about to be removed.
+.ie n .IP $obj\->UTF8($belowFlag,[$fh]) 4
+.el .IP \f(CW$obj\fR\->UTF8($belowFlag,[$fh]) 4
+.IX Item "$obj->UTF8($belowFlag,[$fh])"
+Optional \- if present it will be called immediately after PUSHED has
+returned. It should return a true value if the layer expects data to be
+UTF\-8 encoded. If it returns true, the result is as if the caller had done
+.Sp
+.Vb 1
+\& ":via(YourClass):utf8"
+.Ve
+.Sp
+If not present or if it returns false, then the stream is left with
+the UTF\-8 flag clear.
+The \fR\f(CI$belowFlag\fR\fI\fR argument will be true if there is a layer below
+and that layer was expecting UTF\-8.
+.ie n .IP $obj\->OPEN($path,$mode,[$fh]) 4
+.el .IP \f(CW$obj\fR\->OPEN($path,$mode,[$fh]) 4
+.IX Item "$obj->OPEN($path,$mode,[$fh])"
+Optional \- if not present a lower layer does the open.
+If present, called for normal opens after the layer is pushed.
+This function is subject to change as there is no easy way
+to get a lower layer to do the open and then regain control.
+.ie n .IP $obj\->BINMODE([$fh]) 4
+.el .IP \f(CW$obj\fR\->BINMODE([$fh]) 4
+.IX Item "$obj->BINMODE([$fh])"
+Optional \- if not present the layer is popped on binmode($fh) or when \f(CW\*(C`:raw\*(C'\fR
+is pushed. If present it should return 0 on success, \-1 on error, or undef
+to pop the layer.
+.ie n .IP $obj\->FDOPEN($fd,[$fh]) 4
+.el .IP \f(CW$obj\fR\->FDOPEN($fd,[$fh]) 4
+.IX Item "$obj->FDOPEN($fd,[$fh])"
+Optional \- if not present a lower layer does the open.
+If present, called after the layer is pushed for opens which pass
+a numeric file descriptor.
+This function is subject to change as there is no easy way
+to get a lower layer to do the open and then regain control.
+.ie n .IP $obj\->SYSOPEN($path,$imode,$perm,[$fh]) 4
+.el .IP \f(CW$obj\fR\->SYSOPEN($path,$imode,$perm,[$fh]) 4
+.IX Item "$obj->SYSOPEN($path,$imode,$perm,[$fh])"
+Optional \- if not present a lower layer does the open.
+If present, called after the layer is pushed for sysopen style opens
+which pass a numeric mode and permissions.
+This function is subject to change as there is no easy way
+to get a lower layer to do the open and then regain control.
+.ie n .IP $obj\->FILENO($fh) 4
+.el .IP \f(CW$obj\fR\->FILENO($fh) 4
+.IX Item "$obj->FILENO($fh)"
+Returns a numeric value for a Unix-like file descriptor. Returns \-1 if
+there isn't one. Optional. Default is fileno($fh).
+.ie n .IP $obj\->READ($buffer,$len,$fh) 4
+.el .IP \f(CW$obj\fR\->READ($buffer,$len,$fh) 4
+.IX Item "$obj->READ($buffer,$len,$fh)"
+Returns the number of octets placed in \f(CW$buffer\fR (must be less than or
+equal to \f(CW$len\fR). Optional. Default is to use FILL instead.
+.ie n .IP $obj\->WRITE($buffer,$fh) 4
+.el .IP \f(CW$obj\fR\->WRITE($buffer,$fh) 4
+.IX Item "$obj->WRITE($buffer,$fh)"
+Returns the number of octets from \f(CW$buffer\fR that have been successfully written.
+.ie n .IP $obj\->FILL($fh) 4
+.el .IP \f(CW$obj\fR\->FILL($fh) 4
+.IX Item "$obj->FILL($fh)"
+Should return a string to be placed in the buffer. Optional. If not
+provided, must provide READ or reject handles open for reading in
+PUSHED.
+.ie n .IP $obj\->CLOSE($fh) 4
+.el .IP \f(CW$obj\fR\->CLOSE($fh) 4
+.IX Item "$obj->CLOSE($fh)"
+Should return 0 on success, \-1 on error.
+Optional.
+.ie n .IP $obj\->SEEK($posn,$whence,$fh) 4
+.el .IP \f(CW$obj\fR\->SEEK($posn,$whence,$fh) 4
+.IX Item "$obj->SEEK($posn,$whence,$fh)"
+Should return 0 on success, \-1 on error.
+Optional. Default is to fail, but that is likely to be changed
+in future.
+.ie n .IP $obj\->TELL($fh) 4
+.el .IP \f(CW$obj\fR\->TELL($fh) 4
+.IX Item "$obj->TELL($fh)"
+Returns file position.
+Optional. Default to be determined.
+.ie n .IP $obj\->UNREAD($buffer,$fh) 4
+.el .IP \f(CW$obj\fR\->UNREAD($buffer,$fh) 4
+.IX Item "$obj->UNREAD($buffer,$fh)"
+Returns the number of octets from \f(CW$buffer\fR that have been successfully
+saved to be returned on future FILL/READ calls. Optional. Default is
+to push data into a temporary layer above this one.
+.ie n .IP $obj\->FLUSH($fh) 4
+.el .IP \f(CW$obj\fR\->FLUSH($fh) 4
+.IX Item "$obj->FLUSH($fh)"
+Flush any buffered write data. May possibly be called on readable
+handles too. Should return 0 on success, \-1 on error.
+.ie n .IP $obj\->SETLINEBUF($fh) 4
+.el .IP \f(CW$obj\fR\->SETLINEBUF($fh) 4
+.IX Item "$obj->SETLINEBUF($fh)"
+Optional. No return.
+.ie n .IP $obj\->CLEARERR($fh) 4
+.el .IP \f(CW$obj\fR\->CLEARERR($fh) 4
+.IX Item "$obj->CLEARERR($fh)"
+Optional. No return.
+.ie n .IP $obj\->ERROR($fh) 4
+.el .IP \f(CW$obj\fR\->ERROR($fh) 4
+.IX Item "$obj->ERROR($fh)"
+Optional. Returns error state. Default is no error until a mechanism
+to signal error (die?) is worked out.
+.ie n .IP $obj\->EOF($fh) 4
+.el .IP \f(CW$obj\fR\->EOF($fh) 4
+.IX Item "$obj->EOF($fh)"
+Optional. Returns end-of-file state. Default is a function of the return
+value of FILL or READ.
+.SH EXAMPLES
+.IX Header "EXAMPLES"
+Check the PerlIO::via:: namespace on CPAN for examples of PerlIO layers
+implemented in Perl. To give you an idea how simple the implementation of
+a PerlIO layer can look, a simple example is included here.
+.SS "Example \- a Hexadecimal Handle"
+.IX Subsection "Example - a Hexadecimal Handle"
+Given the following module, PerlIO::via::Hex :
+.PP
+.Vb 1
+\& package PerlIO::via::Hex;
+\&
+\& sub PUSHED
+\& {
+\& my ($class,$mode,$fh) = @_;
+\& # When writing we buffer the data
+\& my $buf = \*(Aq\*(Aq;
+\& return bless \e$buf,$class;
+\& }
+\&
+\& sub FILL
+\& {
+\& my ($obj,$fh) = @_;
+\& my $line = <$fh>;
+\& return (defined $line) ? pack("H*", $line) : undef;
+\& }
+\&
+\& sub WRITE
+\& {
+\& my ($obj,$buf,$fh) = @_;
+\& $$obj .= unpack("H*", $buf);
+\& return length($buf);
+\& }
+\&
+\& sub FLUSH
+\& {
+\& my ($obj,$fh) = @_;
+\& print $fh $$obj or return \-1;
+\& $$obj = \*(Aq\*(Aq;
+\& return 0;
+\& }
+\&
+\& 1;
+.Ve
+.PP
+The following code opens up an output handle that will convert any
+output to a hexadecimal dump of the output bytes: for example "A" will
+be converted to "41" (on ASCII-based machines, on EBCDIC platforms
+the "A" will become "c1")
+.PP
+.Vb 2
+\& use PerlIO::via::Hex;
+\& open(my $fh, ">:via(Hex)", "foo.hex");
+.Ve
+.PP
+and the following code will read the hexdump in and convert it
+on the fly back into bytes:
+.PP
+.Vb 1
+\& open(my $fh, "<:via(Hex)", "foo.hex");
+.Ve