← Index
NYTProf Performance Profile   « line view »
For /usr/local/libexec/sympa/task_manager-debug.pl
  Run on Tue Jun 1 22:32:51 2021
Reported on Tue Jun 1 22:35:09 2021

Filename/usr/local/lib/perl5/5.32/mach/IO/File.pm
StatementsExecuted 14136 statements in 52.5ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11781113.7ms13.7msIO::File::::CORE:openIO::File::CORE:open (opcode)
11781111.8ms38.7msIO::File::::openIO::File::open
1178539.00ms419msIO::File::::newIO::File::new
2356111.53ms1.53msIO::File::::CORE:matchIO::File::CORE:match (opcode)
0000s0sIO::File::::BEGIN@127IO::File::BEGIN@127
0000s0sIO::File::::BEGIN@128IO::File::BEGIN@128
0000s0sIO::File::::BEGIN@129IO::File::BEGIN@129
0000s0sIO::File::::BEGIN@130IO::File::BEGIN@130
0000s0sIO::File::::BEGIN@131IO::File::BEGIN@131
0000s0sIO::File::::BEGIN@132IO::File::BEGIN@132
0000s0sIO::File::::__ANON__IO::File::__ANON__ (xsub)
0000s0sIO::File::::binmodeIO::File::binmode
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
127use 5.008_001;
128use strict;
129use Carp;
130use Symbol;
131use SelectSaver;
132use IO::Seekable;
133
134require Exporter;
135
136our @ISA = qw(IO::Handle IO::Seekable Exporter);
137
138our $VERSION = "1.41";
139
140our @EXPORT = @IO::Seekable::EXPORT;
141
142eval {
143 # Make all Fcntl O_XXX constants available for importing
144 require Fcntl;
145 my @O = grep /^O_/, @Fcntl::EXPORT;
146 Fcntl->import(@O); # first we import what we want to export
147 push(@EXPORT, @O);
148};
149
150################################################
151## Constructor
152##
153
154
# spent 419ms (9.00+410) within IO::File::new which was called 1178 times, avg 355µs/call: # 1150 times (8.65ms+396ms) by Sympa::Spool::next at line 144 of /usr/local/libexec/sympa/Sympa/Spool.pm, avg 352µs/call # 13 times (128µs+7.97ms) by Sympa::List::_load_list_config_file at line 5003 of /usr/local/libexec/sympa/Sympa/List.pm, avg 623µs/call # 13 times (122µs+4.34ms) by Sympa::List::load at line 695 of /usr/local/libexec/sympa/Sympa/List.pm, avg 344µs/call # once (88µs+1.19ms) by Sympa::Process::write_pid at line 316 of /usr/local/libexec/sympa/Sympa/Process.pm # once (8µs+294µs) by Sympa::Process::remove_pid at line 238 of /usr/local/libexec/sympa/Sympa/Process.pm
sub new {
1551178343µs my $type = shift;
1561178572µs my $class = ref($type) || $type || "IO::File";
1571178717µs @_ >= 0 && @_ <= 3
158 or croak "usage: $class->new([FILENAME [,MODE [,PERMS]]])";
15911782.05ms117811.5ms my $fh = $class->SUPER::new();
# spent 11.5ms making 1178 calls to IO::Handle::new, avg 10µs/call
16011782.09ms1178398ms if (@_) {
# spent 398ms making 1178 calls to Sympa::LockedFile::open, avg 338µs/call
161 $fh->open(@_)
162 or return undef;
163 }
164117814.1ms $fh;
165}
166
167################################################
168## Open
169##
170
171
# spent 38.7ms (11.8+26.9) within IO::File::open which was called 1178 times, avg 33µs/call: # 1178 times (11.8ms+26.9ms) by Sympa::LockedFile::open at line 90 of /usr/local/libexec/sympa/Sympa/LockedFile.pm, avg 33µs/call
sub open {
1721178792µs @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])';
1731178692µs my ($fh, $file) = @_;
1741178482µs if (@_ > 2) {
17511781.02ms my ($mode, $perms) = @_[2, 3];
17611784.50ms23561.53ms if ($mode =~ /^\d+$/) {
# spent 1.53ms making 2356 calls to IO::File::CORE:match, avg 650ns/call
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 {
183117825.1ms235625.3ms return open($fh, IO::Handle::_open_mode_string($mode), $file);
# spent 13.7ms making 1178 calls to IO::File::CORE:open, avg 12µs/call # spent 11.6ms making 1178 calls to IO::Handle::_open_mode_string, avg 10µs/call
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
2021;
 
# spent 1.53ms within IO::File::CORE:match which was called 2356 times, avg 650ns/call: # 2356 times (1.53ms+0s) by IO::File::open at line 176, avg 650ns/call
sub IO::File::CORE:match; # opcode
# spent 13.7ms within IO::File::CORE:open which was called 1178 times, avg 12µs/call: # 1178 times (13.7ms+0s) by IO::File::open at line 183, avg 12µs/call
sub IO::File::CORE:open; # opcode