diff options
author | Mark Murray <markm@FreeBSD.org> | 2000-06-25 11:04:01 +0000 |
---|---|---|
committer | Mark Murray <markm@FreeBSD.org> | 2000-06-25 11:04:01 +0000 |
commit | 5bd17c648f0bbb4ad71945d610980dae7c796874 (patch) | |
tree | 27e7479daa33fdd2e21c9511b9eaeef4bd9d5b51 /contrib/perl5/lib/open.pm | |
parent | 2c00ff843494c9d436d48007c3cdf9c7500976a8 (diff) | |
parent | 120a02d4f3990e59fba1df18a155ff7233b4d827 (diff) |
This commit was generated by cvs2svn to compensate for changes in r62076,
which included commits to RCS files with non-trunk default branches.
Notes
Notes:
svn path=/head/; revision=62077
Diffstat (limited to 'contrib/perl5/lib/open.pm')
-rw-r--r-- | contrib/perl5/lib/open.pm | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/contrib/perl5/lib/open.pm b/contrib/perl5/lib/open.pm new file mode 100644 index 000000000000..cdd20ac2c392 --- /dev/null +++ b/contrib/perl5/lib/open.pm @@ -0,0 +1,76 @@ +package open; +$open::hint_bits = 0x20000; + +sub import { + shift; + die "`use open' needs explicit list of disciplines" unless @_; + $^H |= $open::hint_bits; + while (@_) { + my $type = shift; + if ($type =~ /^(IN|OUT)\z/s) { + my $discp = shift; + unless ($discp =~ /^\s*:(raw|crlf)\s*\z/s) { + die "Unknown discipline '$discp'"; + } + $^H{"open_$type"} = $discp; + } + else { + die "Unknown discipline class '$type'"; + } + } +} + +1; +__END__ + +=head1 NAME + +open - perl pragma to set default disciplines for input and output + +=head1 SYNOPSIS + + use open IN => ":crlf", OUT => ":raw"; + +=head1 DESCRIPTION + +The open pragma is used to declare one or more default disciplines for +I/O operations. Any open() and readpipe() (aka qx//) operators found +within the lexical scope of this pragma will use the declared defaults. +Neither open() with an explicit set of disciplines, nor sysopen() are +influenced by this pragma. + +Only the two pseudo-disciplines ":raw" and ":crlf" are currently +available. + +The ":raw" discipline corresponds to "binary mode" and the ":crlf" +discipline corresponds to "text mode" on platforms that distinguish +between the two modes when opening files (which is many DOS-like +platforms, including Windows). These two disciplines are currently +no-ops on platforms where binmode() is a no-op, but will be +supported everywhere in future. + +=head1 UNIMPLEMENTED FUNCTIONALITY + +Full-fledged support for I/O disciplines is currently unimplemented. +When they are eventually supported, this pragma will serve as one of +the interfaces to declare default disciplines for all I/O. + +In future, any default disciplines declared by this pragma will be +available by the special discipline name ":DEFAULT", and could be used +within handle constructors that allow disciplines to be specified. +This would make it possible to stack new disciplines over the default +ones. + + open FH, "<:para :DEFAULT", $file or die "can't open $file: $!"; + +Socket and directory handles will also support disciplines in +future. + +Full support for I/O disciplines will enable all of the supported +disciplines to work on all platforms. + +=head1 SEE ALSO + +L<perlfunc/"binmode">, L<perlfunc/"open">, L<perlunicode> + +=cut |