source: trunk/essentials/dev-lang/perl/lib/PerlIO.pm@ 3951

Last change on this file since 3951 was 3181, checked in by bird, 19 years ago

perl 5.8.8

File size: 10.7 KB
Line 
1package PerlIO;
2
3our $VERSION = '1.04';
4
5# Map layer name to package that defines it
6our %alias;
7
8sub import
9{
10 my $class = shift;
11 while (@_)
12 {
13 my $layer = shift;
14 if (exists $alias{$layer})
15 {
16 $layer = $alias{$layer}
17 }
18 else
19 {
20 $layer = "${class}::$layer";
21 }
22 eval "require $layer";
23 warn $@ if $@;
24 }
25}
26
27sub F_UTF8 () { 0x8000 }
28
291;
30__END__
31
32=head1 NAME
33
34PerlIO - On demand loader for PerlIO layers and root of PerlIO::* name space
35
36=head1 SYNOPSIS
37
38 open($fh,"<:crlf", "my.txt"); # support platform-native and CRLF text files
39
40 open($fh,"<","his.jpg"); # portably open a binary file for reading
41 binmode($fh);
42
43 Shell:
44 PERLIO=perlio perl ....
45
46=head1 DESCRIPTION
47
48When an undefined layer 'foo' is encountered in an C<open> or
49C<binmode> layer specification then C code performs the equivalent of:
50
51 use PerlIO 'foo';
52
53The perl code in PerlIO.pm then attempts to locate a layer by doing
54
55 require PerlIO::foo;
56
57Otherwise the C<PerlIO> package is a place holder for additional
58PerlIO related functions.
59
60The following layers are currently defined:
61
62=over 4
63
64=item :unix
65
66Lowest level layer which provides basic PerlIO operations in terms of
67UNIX/POSIX numeric file descriptor calls
68(open(), read(), write(), lseek(), close()).
69
70=item :stdio
71
72Layer which calls C<fread>, C<fwrite> and C<fseek>/C<ftell> etc. Note
73that as this is "real" stdio it will ignore any layers beneath it and
74got straight to the operating system via the C library as usual.
75
76=item :perlio
77
78A from scratch implementation of buffering for PerlIO. Provides fast
79access to the buffer for C<sv_gets> which implements perl's readline/E<lt>E<gt>
80and in general attempts to minimize data copying.
81
82C<:perlio> will insert a C<:unix> layer below itself to do low level IO.
83
84=item :crlf
85
86A layer that implements DOS/Windows like CRLF line endings. On read
87converts pairs of CR,LF to a single "\n" newline character. On write
88converts each "\n" to a CR,LF pair. Note that this layer likes to be
89one of its kind: it silently ignores attempts to be pushed into the
90layer stack more than once.
91
92It currently does I<not> mimic MS-DOS as far as treating of Control-Z
93as being an end-of-file marker.
94
95(Gory details follow) To be more exact what happens is this: after
96pushing itself to the stack, the C<:crlf> layer checks all the layers
97below itself to find the first layer that is capable of being a CRLF
98layer but is not yet enabled to be a CRLF layer. If it finds such a
99layer, it enables the CRLFness of that other deeper layer, and then
100pops itself off the stack. If not, fine, use the one we just pushed.
101
102The end result is that a C<:crlf> means "please enable the first CRLF
103layer you can find, and if you can't find one, here would be a good
104spot to place a new one."
105
106Based on the C<:perlio> layer.
107
108=item :mmap
109
110A layer which implements "reading" of files by using C<mmap()> to
111make (whole) file appear in the process's address space, and then
112using that as PerlIO's "buffer". This I<may> be faster in certain
113circumstances for large files, and may result in less physical memory
114use when multiple processes are reading the same file.
115
116Files which are not C<mmap()>-able revert to behaving like the C<:perlio>
117layer. Writes also behave like C<:perlio> layer as C<mmap()> for write
118needs extra house-keeping (to extend the file) which negates any advantage.
119
120The C<:mmap> layer will not exist if platform does not support C<mmap()>.
121
122=item :utf8
123
124Declares that the stream accepts perl's internal encoding of
125characters. (Which really is UTF-8 on ASCII machines, but is
126UTF-EBCDIC on EBCDIC machines.) This allows any character perl can
127represent to be read from or written to the stream. The UTF-X encoding
128is chosen to render simple text parts (i.e. non-accented letters,
129digits and common punctuation) human readable in the encoded file.
130
131Here is how to write your native data out using UTF-8 (or UTF-EBCDIC)
132and then read it back in.
133
134 open(F, ">:utf8", "data.utf");
135 print F $out;
136 close(F);
137
138 open(F, "<:utf8", "data.utf");
139 $in = <F>;
140 close(F);
141
142=item :bytes
143
144This is the inverse of C<:utf8> layer. It turns off the flag
145on the layer below so that data read from it is considered to
146be "octets" i.e. characters in range 0..255 only. Likewise