← Index
NYTProf Performance Profile   « line view »
For examples/benchmark4.pl
  Run on Thu Aug 28 19:01:43 2014
Reported on Thu Aug 28 19:02:42 2014

Filename/usr/share/perl/5.18/AutoLoader.pm
StatementsExecuted 147 statements in 2.31ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
311664µs964µsAutoLoader::::autoload_subAutoLoader::autoload_sub
333313µs374µsAutoLoader::::importAutoLoader::import
31169µs136µsAutoLoader::::find_filenameAutoLoader::find_filename
62143µs43µsAutoLoader::::CORE:regcompAutoLoader::CORE:regcomp (opcode)
157137µs37µsAutoLoader::::CORE:substAutoLoader::CORE:subst (opcode)
31126µs26µsAutoLoader::::CORE:ftereadAutoLoader::CORE:fteread (opcode)
33224µs988µsAutoLoader::::AUTOLOADAutoLoader::AUTOLOAD
94122µs22µsAutoLoader::::CORE:matchAutoLoader::CORE:match (opcode)
11112µs24µsAutoLoader::::BEGIN@3AutoLoader::BEGIN@3
11110µs10µsAutoLoader::::BEGIN@4AutoLoader::BEGIN@4
1117µs22µsAutoLoader::::BEGIN@146AutoLoader::BEGIN@146
1117µs18µsAutoLoader::::BEGIN@194AutoLoader::BEGIN@194
12217µs7µsAutoLoader::::CORE:substcontAutoLoader::CORE:substcont (opcode)
1116µs17µsAutoLoader::::BEGIN@37AutoLoader::BEGIN@37
1116µs6µsAutoLoader::::BEGIN@13AutoLoader::BEGIN@13
0000s0sAutoLoader::::__ANON__[:38]AutoLoader::__ANON__[:38]
0000s0sAutoLoader::::unimportAutoLoader::unimport
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package AutoLoader;
2
3224µs235µs
# spent 24µs (12+12) within AutoLoader::BEGIN@3 which was called: # once (12µs+12µs) by NetAddr::IP::InetBase::BEGIN@9 at line 3
use strict;
# spent 24µs making 1 call to AutoLoader::BEGIN@3 # spent 12µs making 1 call to strict::import
42114µs110µs
# spent 10µs within AutoLoader::BEGIN@4 which was called: # once (10µs+0s) by NetAddr::IP::InetBase::BEGIN@9 at line 4
use 5.006_001;
# spent 10µs making 1 call to AutoLoader::BEGIN@4
5
61200nsour($VERSION, $AUTOLOAD);
7
81200nsmy $is_dosish;
91100nsmy $is_epoc;
1010smy $is_vms;
1110smy $is_macos;
12
13
# spent 6µs within AutoLoader::BEGIN@13 which was called: # once (6µs+0s) by NetAddr::IP::InetBase::BEGIN@9 at line 19
BEGIN {
1412µs $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
151300ns $is_epoc = $^O eq 'epoc';
161200ns $is_vms = $^O eq 'VMS';
171300ns $is_macos = $^O eq 'MacOS';
1814µs $VERSION = '5.73';
191105µs16µs}
# spent 6µs making 1 call to AutoLoader::BEGIN@13
20
21
# spent 988µs (24+964) within AutoLoader::AUTOLOAD which was called 3 times, avg 329µs/call: # once (7µs+407µs) by NetAddr::IP::Lite::BEGIN@9 at line 81 of NetAddr/IP/InetBase.pm # once (8µs+393µs) by NetAddr::IP::InetBase::inet_any2n at line 490 of NetAddr/IP/InetBase.pm # once (9µs+164µs) by NetAddr::IP::BEGIN@8 at line 649 of NetAddr/IP/Lite.pm
AUTOLOAD {
2231µs my $sub = $AUTOLOAD;
2332µs3964µs autoload_sub($sub);
# spent 964µs making 3 calls to AutoLoader::autoload_sub, avg 321µs/call
24212µs2552µs goto &$sub;
# spent 483µs making 1 call to NetAddr::IP::InetBase::inet_any2n # spent 70µs making 1 call to NetAddr::IP::InetBase::ipv6_aton
25}
26
27
# spent 964µs (664+300) within AutoLoader::autoload_sub which was called 3 times, avg 321µs/call: # 3 times (664µs+300µs) by AutoLoader::AUTOLOAD at line 23, avg 321µs/call
sub autoload_sub {
283900ns my $sub = shift;
29
3033µs3136µs my $filename = AutoLoader::find_filename( $sub );
# spent 136µs making 3 calls to AutoLoader::find_filename, avg 45µs/call
31
323600ns my $save = $@;
333127µs local $!; # Do not munge the value.
349500µs eval { local $SIG{__DIE__}; require $filename };
353700ns if ($@) {
36110µs12µs if (substr($sub,-9) eq '::DESTROY') {
# spent 2µs making 1 call to AutoLoader::CORE:match
372535µs227µs
# spent 17µs (6+10) within AutoLoader::BEGIN@37 which was called: # once (6µs+10µs) by NetAddr::IP::InetBase::BEGIN@9 at line 37
no strict 'refs';
# spent 17µs making 1 call to AutoLoader::BEGIN@37 # spent 10µs making 1 call to strict::unimport
38 *$sub = sub {};
39 $@ = undef;
40 } elsif ($@ =~ /^Can't locate/) {
41 # The load might just have failed because the filename was too
42 # long for some old SVR3 systems which treat long names as errors.
43 # If we can successfully truncate a long name then it's worth a go.
44 # There is a slight risk that we could pick up the wrong file here
45 # but autosplit should have warned about that when splitting.
4617µs14µs if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
# spent 4µs making 1 call to AutoLoader::CORE:subst
47 eval { local $SIG{__DIE__}; require $filename };
48 }
49 }
501100ns if ($@){
5114µs12µs $@ =~ s/ at .*\n//;
# spent 2µs making 1 call to AutoLoader::CORE:subst
521500ns my $error = $@;
531300ns require Carp;
5412µs1156µs Carp::croak($error);
# spent 156µs making 1 call to Carp::croak
55 }
56 }
572600ns $@ = $save;
58
59210µs return 1;
60}
61
62
# spent 136µs (69+67) within AutoLoader::find_filename which was called 3 times, avg 45µs/call: # 3 times (69µs+67µs) by AutoLoader::autoload_sub at line 30, avg 45µs/call
sub find_filename {
633700ns my $sub = shift;
643300ns my $filename;
65 # Braces used to preserve $1 et al.
66 {
67 # Try to find the autoloaded file from the package-qualified
68 # name of the sub. e.g., if the sub needed is
69 # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is
70 # something like '/usr/lib/perl5/Getopt/Long.pm', and the
71 # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'.
72 #
73 # However, if @INC is a relative path, this might not work. If,
74 # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is
75 # 'lib/Getopt/Long.pm', and we want to require
76 # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib').
77 # In this case, we simple prepend the 'auto/' and let the
78 # C<require> take care of the searching for us.
79
80620µs310µs my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
# spent 10µs making 3 calls to AutoLoader::CORE:match, avg 3µs/call
81312µs36µs $pkg =~ s#::#/#g;
# spent 6µs making 3 calls to AutoLoader::CORE:subst, avg 2µs/call
8234µs if (defined($filename = $INC{"$pkg.pm"})) {
8331µs if ($is_macos) {
84 $pkg =~ tr#/#:#;
85 $filename = undef
86 unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
87 } else {
88344µs1220µs $filename = undef
# spent 12µs making 3 calls to AutoLoader::CORE:regcomp, avg 4µs/call # spent 5µs making 3 calls to AutoLoader::CORE:subst, avg 2µs/call # spent 3µs making 6 calls to AutoLoader::CORE:substcont, avg 533ns/call
89 unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s;
90 }
91
92 # if the file exists, then make sure that it is a
93 # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al',
94 # or './lib/auto/foo/bar.al'. This avoids C<require> searching
95 # (and failing) to find the 'lib/auto/foo/bar.al' because it
96 # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib').
97
98335µs326µs if (defined $filename and -r $filename) {
# spent 26µs making 3 calls to AutoLoader::CORE:fteread, avg 9µs/call
9926µs22µs unless ($filename =~ m|^/|s) {
# spent 2µs making 2 calls to AutoLoader::CORE:match, avg 1µs/call
100 if ($is_dosish) {
101 unless ($filename =~ m{^([a-z]:)?[\\/]}is) {
102 if ($^O ne 'NetWare') {
103 $filename = "./$filename";
104 } else {
105 $filename = "$filename";
106 }
107 }
108 }
109 elsif ($is_epoc) {
110 unless ($filename =~ m{^([a-z?]:)?[\\/]}is) {
111 $filename = "./$filename";
112 }
113 }
114 elsif ($is_vms) {
115 # XXX todo by VMSmiths
116 $filename = "./$filename";
117 }
118 elsif (!$is_macos) {
119 $filename = "./$filename";
120 }
121 }
122 }
123 else {
1241400ns $filename = undef;
125 }
126 }
12732µs unless (defined $filename) {
128 # let C<require> do the searching
1291700ns $filename = "auto/$sub.al";
13015µs12µs $filename =~ s#::#/#g;
# spent 2µs making 1 call to AutoLoader::CORE:subst
131 }
132 }
13338µs return $filename;
134}
135
136
# spent 374µs (313+60) within AutoLoader::import which was called 3 times, avg 125µs/call: # once (142µs+19µs) by NetAddr::IP::BEGIN@23 at line 23 of NetAddr/IP.pm # once (112µs+23µs) by NetAddr::IP::InetBase::BEGIN@9 at line 9 of NetAddr/IP/InetBase.pm # once (59µs+18µs) by NetAddr::IP::Util::BEGIN@9 at line 9 of NetAddr/IP/Util.pm
sub import {
13731µs my $pkg = shift;
13832µs my $callpkg = caller;
139
140 #
141 # Export symbols, but not by accident of inheritance.
142 #
143
14432µs if ($pkg eq 'AutoLoader') {
145320µs38µs if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) {
# spent 8µs making 3 calls to AutoLoader::CORE:match, avg 3µs/call
1462248µs238µs
# spent 22µs (7+15) within AutoLoader::BEGIN@146 which was called: # once (7µs+15µs) by NetAddr::IP::InetBase::BEGIN@9 at line 146
no strict 'refs';
# spent 22µs making 1 call to AutoLoader::BEGIN@146 # spent 15µs making 1 call to strict::unimport
14739µs *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD;
148 }
149 }
150
151 #
152 # Try to find the autosplit index file. Eg., if the call package
153 # is POSIX, then $INC{POSIX.pm} is something like
154 # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in
155 # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that.
156 #
157 # However, if @INC is a relative path, this might not work. If,
158 # for example, @INC = ('lib'), then
159 # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require
160 # 'auto/POSIX/autosplit.ix' (without the leading 'lib').
161 #
162
163314µs37µs (my $calldir = $callpkg) =~ s#::#/#g;
# spent 7µs making 3 calls to AutoLoader::CORE:subst, avg 2µs/call
16432µs my $path = $INC{$calldir . '.pm'};
165315µs if (defined($path)) {
166 # Try absolute path name, but only eval it if the
167 # transformation from module path to autosplit.ix path
168 # succeeded!
1693300ns my $replaced_okay;
17031µs if ($is_macos) {
171 (my $malldir = $calldir) =~ tr#/#:#;
172 $replaced_okay = ($path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s);
173 } else {
174374µs1246µs $replaced_okay = ($path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#);
# spent 31µs making 3 calls to AutoLoader::CORE:regcomp, avg 10µs/call # spent 11µs making 3 calls to AutoLoader::CORE:subst, avg 4µs/call # spent 4µs making 6 calls to AutoLoader::CORE:substcont, avg 683ns/call
175 }
176
1776233µs eval { require $path; } if $replaced_okay;
178 # If that failed, try relative path with normal @INC searching.
17931µs if (!$replaced_okay or $@) {
180 $path ="auto/$calldir/autosplit.ix";
181 eval { require $path; };
182 }
18331µs if ($@) {
184 my $error = $@;
185 require Carp;
186 Carp::carp($error);
187 }
188 }
189}
190
191sub unimport {
192 my $callpkg = caller;
193
194280µs229µs
# spent 18µs (7+11) within AutoLoader::BEGIN@194 which was called: # once (7µs+11µs) by NetAddr::IP::InetBase::BEGIN@9 at line 194
no strict 'refs';
# spent 18µs making 1 call to AutoLoader::BEGIN@194 # spent 11µs making 1 call to strict::unimport
195
196 for my $exported (qw( AUTOLOAD )) {
197 my $symname = $callpkg . '::' . $exported;
198 undef *{ $symname } if \&{ $symname } == \&{ $exported };
199 *{ $symname } = \&{ $symname };
200 }
201}
202
20314µs1;
204
205__END__
 
# spent 26µs within AutoLoader::CORE:fteread which was called 3 times, avg 9µs/call: # 3 times (26µs+0s) by AutoLoader::find_filename at line 98, avg 9µs/call
sub AutoLoader::CORE:fteread; # opcode
# spent 22µs within AutoLoader::CORE:match which was called 9 times, avg 2µs/call: # 3 times (10µs+0s) by AutoLoader::find_filename at line 80, avg 3µs/call # 3 times (8µs+0s) by AutoLoader::import at line 145, avg 3µs/call # 2 times (2µs+0s) by AutoLoader::find_filename at line 99, avg 1µs/call # once (2µs+0s) by AutoLoader::autoload_sub at line 36
sub AutoLoader::CORE:match; # opcode
# spent 43µs within AutoLoader::CORE:regcomp which was called 6 times, avg 7µs/call: # 3 times (31µs+0s) by AutoLoader::import at line 174, avg 10µs/call # 3 times (12µs+0s) by AutoLoader::find_filename at line 88, avg 4µs/call
sub AutoLoader::CORE:regcomp; # opcode
# spent 37µs within AutoLoader::CORE:subst which was called 15 times, avg 2µs/call: # 3 times (11µs+0s) by AutoLoader::import at line 174, avg 4µs/call # 3 times (7µs+0s) by AutoLoader::import at line 163, avg 2µs/call # 3 times (6µs+0s) by AutoLoader::find_filename at line 81, avg 2µs/call # 3 times (5µs+0s) by AutoLoader::find_filename at line 88, avg 2µs/call # once (4µs+0s) by AutoLoader::autoload_sub at line 46 # once (2µs+0s) by AutoLoader::find_filename at line 130 # once (2µs+0s) by AutoLoader::autoload_sub at line 51
sub AutoLoader::CORE:subst; # opcode
# spent 7µs within AutoLoader::CORE:substcont which was called 12 times, avg 608ns/call: # 6 times (4µs+0s) by AutoLoader::import at line 174, avg 683ns/call # 6 times (3µs+0s) by AutoLoader::find_filename at line 88, avg 533ns/call
sub AutoLoader::CORE:substcont; # opcode