blob: e474032e286feae04b76090efa39d0abfd64986e [file] [log] [blame]
Rashed Abdel-Tawab4db47f42019-09-06 10:38:22 -07001package FileHandle;
2
3use 5.006;
4use strict;
5our($VERSION, @ISA, @EXPORT, @EXPORT_OK);
6
7$VERSION = "2.03";
8
9require IO::File;
10@ISA = qw(IO::File);
11
12@EXPORT = qw(_IOFBF _IOLBF _IONBF);
13
14@EXPORT_OK = qw(
15 pipe
16
17 autoflush
18 output_field_separator
19 output_record_separator
20 input_record_separator
21 input_line_number
22 format_page_number
23 format_lines_per_page
24 format_lines_left
25 format_name
26 format_top_name
27 format_line_break_characters
28 format_formfeed
29
30 print
31 printf
32 getline
33 getlines
34);
35
36#
37# Everything we're willing to export, we must first import.
38#
39IO::Handle->import( grep { !defined(&$_) } @EXPORT, @EXPORT_OK );
40
41#
42# Some people call "FileHandle::function", so all the functions
43# that were in the old FileHandle class must be imported, too.
44#
45{
46 no strict 'refs';
47
48 my %import = (
49 'IO::Handle' =>
50 [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets
51 eof flush error clearerr setbuf setvbuf _open_mode_string)],
52 'IO::Seekable' =>
53 [qw(seek tell getpos setpos)],
54 'IO::File' =>
55 [qw(new new_tmpfile open)]
56 );
57 for my $pkg (keys %import) {
58 for my $func (@{$import{$pkg}}) {
59 my $c = *{"${pkg}::$func"}{CODE}
60 or die "${pkg}::$func missing";
61 *$func = $c;
62 }
63 }
64}
65
66#
67# Specialized importer for Fcntl magic.
68#
69sub import {
70 my $pkg = shift;
71 my $callpkg = caller;
72 require Exporter;
73 Exporter::export($pkg, $callpkg, @_);
74
75 #
76 # If the Fcntl extension is available,
77 # export its constants.
78 #
79 eval {
80 require Fcntl;
81 Exporter::export('Fcntl', $callpkg);
82 };
83}
84
85################################################
86# This is the only exported function we define;
87# the rest come from other classes.
88#
89
90sub pipe {
91 my $r = IO::Handle->new;
92 my $w = IO::Handle->new;
93 CORE::pipe($r, $w) or return undef;
94 ($r, $w);
95}
96
97# Rebless standard file handles
98bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle";
99bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle";
100bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle";
101
1021;
103
104__END__
105