← Index
NYTProf Performance Profile   « line view »
For ../prof.pl
  Run on Thu Dec 15 15:23:56 2022
Reported on Thu Dec 15 15:27:01 2022

Filename/Users/ether/perl5/perlbrew/perls/36.0/lib/5.36.0/darwin-2level/IO/File.pm
StatementsExecuted 22 statements in 2.02ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1111.53ms1.75msIO::File::::BEGIN@130IO::File::BEGIN@130
111673µs7.79msIO::File::::BEGIN@132IO::File::BEGIN@132
111545µs638µsIO::File::::BEGIN@131IO::File::BEGIN@131
11155µs55µsIO::File::::BEGIN@127IO::File::BEGIN@127
11118µs71µsIO::File::::BEGIN@129IO::File::BEGIN@129
681116µs16µsIO::File::::CORE:matchIO::File::CORE:match (opcode)
1118µs12µsIO::File::::BEGIN@128IO::File::BEGIN@128
1111µs1µsIO::File::::__ANON__IO::File::__ANON__ (xsub)
0000s0sIO::File::::binmodeIO::File::binmode
0000s0sIO::File::::newIO::File::new
0000s0sIO::File::::openIO::File::open
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1#
2
3package IO::File;
4
5=head1 NAME
6
7IO::File - supply object methods for filehandles
8
9=head1 SYNOPSIS
10
11 use IO::File;
12
13 $fh = IO::File->new();
14 if ($fh->open("< file")) {
15 print <$fh>;
16 $fh->close;
17 }
18
19 $fh = IO::File->new("> file");
20 if (defined $fh) {
21 print $fh "bar\n";
22 $fh->close;
23 }
24
25 $fh = IO::File->new("file", "r");
26 if (defined $fh) {
27 print <$fh>;
28 undef $fh; # automatically closes the file
29 }
30
31 $fh = IO::File->new("file", O_WRONLY|O_APPEND);
32 if (defined $fh) {
33 print $fh "corge\n";
34
35 $pos = $fh->getpos;
36 $fh->setpos($pos);
37
38 undef $fh; # automatically closes the file
39 }
40
41 autoflush STDOUT 1;
42
43=head1 DESCRIPTION
44
45C<IO::File> inherits from C<IO::Handle> and C<IO::Seekable>. It extends
46these classes with methods that are specific to file handles.
47
48=head1 CONSTRUCTOR
49
50=over 4
51
52=item new ( FILENAME [,MODE [,PERMS]] )
53
54Creates an C<IO::File>. If it receives any parameters, they are passed to
55the method C<open>; if the open fails, the object is destroyed. Otherwise,
56it is returned to the caller.
57
58=item new_tmpfile
59
60Creates an C<IO::File> opened for read/write on a newly created temporary
61file. On systems where this is possible, the temporary file is anonymous
62(i.e. it is unlinked after creation, but held open). If the temporary
63file cannot be created or opened, the C<IO::File> object is destroyed.
64Otherwise, it is returned to the caller.
65
66=back
67
68=head1 METHODS
69
70=over 4
71
72=item open( FILENAME [,MODE [,PERMS]] )
73
74=item open( FILENAME, IOLAYERS )
75
76C<open> accepts one, two or three parameters. With one parameter,
77it is just a front end for the built-in C<open> function. With two or three
78parameters, the first parameter is a filename that may include
79whitespace or other special characters, and the second parameter is
80the open mode, optionally followed by a file permission value.
81
82If C<IO::File::open> receives a Perl mode string ("E<gt>", "+E<lt>", etc.)
83or an ANSI C fopen() mode string ("w", "r+", etc.), it uses the basic
84Perl C<open> operator (but protects any special characters).
85
86If C<IO::File::open> is given a numeric mode, it passes that mode
87and the optional permissions value to the Perl C<sysopen> operator.
88The permissions default to 0666.
89
90If C<IO::File::open> is given a mode that includes the C<:> character,
91it passes all the three arguments to the three-argument C<open> operator.
92
93For convenience, C<IO::File> exports the O_XXX constants from the
94Fcntl module, if this module is available.
95
96=item binmode( [LAYER] )
97
98C<binmode> sets C<binmode> on the underlying C<IO> object, as documented
99in C<perldoc -f binmode>.
100
101C<binmode> accepts one optional parameter, which is the layer to be
102passed on to the C<binmode> call.
103
104=back
105
106=head1 NOTE
107
108Some operating systems may perform C<IO::File::new()> or C<IO::File::open()>
109on a directory without errors. This behavior is not portable and not
110suggested for use. Using C<opendir()> and C<readdir()> or C<IO::Dir> are
111suggested instead.
112
113=head1 SEE ALSO
114
115L<perlfunc>,
116L<perlop/"I/O Operators">,
117L<IO::Handle>,
118L<IO::Seekable>,
119L<IO::Dir>
120
121=head1 HISTORY
122
123Derived from FileHandle.pm by Graham Barr E<lt>F<gbarr@pobox.com>E<gt>.
124
125=cut
126
127262µs155µs
# spent 55µs within IO::File::BEGIN@127 which was called: # once (55µs+0s) by IO::Compress::Base::BEGIN@11 at line 127
use 5.008_001;
# spent 55µs making 1 call to IO::File::BEGIN@127
128239µs216µs
# spent 12µs (8+4) within IO::File::BEGIN@128 which was called: # once (8µs+4µs) by IO::Compress::Base::BEGIN@11 at line 128
use strict;
# spent 12µs making 1 call to IO::File::BEGIN@128 # spent 4µs making 1 call to strict::import
129233µs2124µs
# spent 71µs (18+53) within IO::File::BEGIN@129 which was called: # once (18µs+53µs) by IO::Compress::Base::BEGIN@11 at line 129
use Carp;
# spent 71µs making 1 call to IO::File::BEGIN@129 # spent 53µs making 1 call to Exporter::import
1302598µs21.79ms
# spent 1.75ms (1.53+218µs) within IO::File::BEGIN@130 which was called: # once (1.53ms+218µs) by IO::Compress::Base::BEGIN@11 at line 130
use Symbol;
# spent 1.75ms making 1 call to IO::File::BEGIN@130 # spent 36µs making 1 call to Exporter::import
1312455µs2639µs
# spent 638µs (545+93) within IO::File::BEGIN@131 which was called: # once (545µs+93µs) by IO::Compress::Base::BEGIN@11 at line 131
use SelectSaver;
# spent 638µs making 1 call to IO::File::BEGIN@131 # spent 1µs making 1 call to IO::File::__ANON__
1322760µs27.81ms
# spent 7.79ms (673µs+7.12) within IO::File::BEGIN@132 which was called: # once (673µs+7.12ms) by IO::Compress::Base::BEGIN@11 at line 132
use IO::Seekable;
# spent 7.79ms making 1 call to IO::File::BEGIN@132 # spent 16µs making 1 call to Exporter::import
133
13410srequire Exporter;
135
13618µsour @ISA = qw(IO::Handle IO::Seekable Exporter);
137
13811µsour $VERSION = "1.48";
139
14010sour @EXPORT = @IO::Seekable::EXPORT;
141
14211µseval {
143 # Make all Fcntl O_XXX constants available for importing
14410s require Fcntl;
145155µs6816µs my @O = grep /^O_/, @Fcntl::EXPORT;
# spent 16µs making 68 calls to IO::File::CORE:match, avg 235ns/call
14611µs175µs Fcntl->import(@O); # first we import what we want to export
# spent 75µs making 1 call to Exporter::import
14714µs push(@EXPORT, @O);
148};
149
150################################################
151## Constructor
152##
153
154sub new {
155 my $type = shift;
156 my $class = ref($type) || $type || "IO::File";
157 @_ >= 0 && @_ <= 3
158 or croak "usage: $class->new([FILENAME [,MODE [,PERMS]]])";
159 my $fh = $class->SUPER::new();
160 if (@_) {
161 $fh->open(@_)
162 or return undef;
163 }
164 $fh;
165}
166
167################################################
168## Open
169##
170
171sub open {
172 @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
173 my ($fh, $file) = @_;
174 if (@_ > 2) {
175 my ($mode, $perms) = @_[2, 3];
176 if ($mode =~ /^\d+$/) {
177 defined $perms or $perms = 0666;
178 return sysopen($fh, $file, $mode, $perms);
179 } elsif ($mode =~ /:/) {
180 return open($fh, $mode, $file) if @_ == 3;
181 croak 'usage: $fh->open(FILENAME, IOLAYERS)';
182 } else {
183 return open($fh, IO::Handle::_open_mode_string($mode), $file);
184 }
185 }
186 open($fh, $file);
187}
188
189################################################
190## Binmode
191##
192
193sub binmode {
194 ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])';
195
196 my($fh, $layer) = @_;
197
198 return binmode $$fh unless $layer;
199 return binmode $$fh, $layer;
200}
201
20215µs1;
 
# spent 16µs within IO::File::CORE:match which was called 68 times, avg 235ns/call: # 68 times (16µs+0s) by IO::Compress::Base::BEGIN@11 at line 145, avg 235ns/call
sub IO::File::CORE:match; # opcode
# spent 1µs within IO::File::__ANON__ which was called: # once (1µs+0s) by IO::File::BEGIN@131 at line 131
sub IO::File::__ANON__; # xsub