← Index
NYTProf Performance Profile   « line view »
For /usr/local/bin/sa-learn
  Run on Tue Nov 7 05:38:10 2017
Reported on Tue Nov 7 06:16:01 2017

Filename/usr/local/lib/perl5/5.24/AutoLoader.pm
StatementsExecuted 224 statements in 9.35ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
5112.87ms4.86msAutoLoader::::autoload_subAutoLoader::autoload_sub
5552.51ms2.85msAutoLoader::::importAutoLoader::import
511486µs1.01msAutoLoader::::find_filenameAutoLoader::find_filename
1021288µs288µsAutoLoader::::CORE:regcompAutoLoader::CORE:regcomp (opcode)
511252µs252µsAutoLoader::::CORE:ftereadAutoLoader::CORE:fteread (opcode)
2371171µs171µsAutoLoader::::CORE:substAutoLoader::CORE:subst (opcode)
553156µs5.01msAutoLoader::::AUTOLOADAutoLoader::AUTOLOAD
1341106µs106µsAutoLoader::::CORE:matchAutoLoader::CORE:match (opcode)
202173µs73µsAutoLoader::::CORE:substcontAutoLoader::CORE:substcont (opcode)
11151µs58µsAutoLoader::::BEGIN@3AutoLoader::BEGIN@3
11132µs32µsAutoLoader::::BEGIN@13AutoLoader::BEGIN@13
11132µs71µsAutoLoader::::BEGIN@194AutoLoader::BEGIN@194
11130µs84µsAutoLoader::::BEGIN@37AutoLoader::BEGIN@37
11127µs90µsAutoLoader::::BEGIN@146AutoLoader::BEGIN@146
11125µs25µsAutoLoader::::BEGIN@4AutoLoader::BEGIN@4
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
3264µs265µs
# spent 58µs (51+7) within AutoLoader::BEGIN@3 which was called: # once (51µs+7µs) by NetAddr::IP::InetBase::BEGIN@9 at line 3
use strict;
# spent 58µs making 1 call to AutoLoader::BEGIN@3 # spent 7µs making 1 call to strict::import
42259µs125µs
# spent 25µs within AutoLoader::BEGIN@4 which was called: # once (25µs+0s) by NetAddr::IP::InetBase::BEGIN@9 at line 4
use 5.006_001;
# spent 25µs making 1 call to AutoLoader::BEGIN@4
5
6our($VERSION, $AUTOLOAD);
7
812µsmy $is_dosish;
9my $is_epoc;
10my $is_vms;
11my $is_macos;
12
13
# spent 32µs within AutoLoader::BEGIN@13 which was called: # once (32µs+0s) by NetAddr::IP::InetBase::BEGIN@9 at line 19
BEGIN {
1419µs $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare';
1512µs $is_epoc = $^O eq 'epoc';
1612µs $is_vms = $^O eq 'VMS';
1718µs $is_macos = $^O eq 'MacOS';
18116µs $VERSION = '5.74';
191213µs132µs}
# spent 32µs making 1 call to AutoLoader::BEGIN@13
20
21
# spent 5.01ms (156µs+4.86) within AutoLoader::AUTOLOAD which was called 5 times, avg 1.00ms/call: # once (27µs+1.52ms) by NetAddr::IP::Lite::BEGIN@9 at line 81 of NetAddr/IP/InetBase.pm # once (40µs+1.07ms) by NetAddr::IP::InetBase::inet_any2n at line 490 of NetAddr/IP/InetBase.pm # once (30µs+842µs) by NetAddr::IP::Lite::addr at line 1105 of NetAddr/IP/Lite.pm # once (24µs+818µs) by IO::Socket::SSL::init at line 389 of Net/SSLeay.pm # once (35µs+609µs) by NetAddr::IP::BEGIN@8 at line 644 of NetAddr/IP/Lite.pm
AUTOLOAD {
22512µs my $sub = $AUTOLOAD;
23535µs54.86ms autoload_sub($sub);
# spent 4.86ms making 5 calls to AutoLoader::autoload_sub, avg 971µs/call
24483µs42.21ms goto &$sub;
# spent 1.45ms making 1 call to NetAddr::IP::InetBase::inet_any2n # spent 314µs making 1 call to Net::SSLeay::randomize # spent 295µs making 1 call to NetAddr::IP::InetBase::ipv6_aton # spent 157µs making 1 call to NetAddr::IP::InetBase::inet_n2dx
25}
26
27
# spent 4.86ms (2.87+1.99) within AutoLoader::autoload_sub which was called 5 times, avg 971µs/call: # 5 times (2.87ms+1.99ms) by AutoLoader::AUTOLOAD at line 23, avg 971µs/call
sub autoload_sub {
28512µs my $sub = shift;
29
30541µs51.01ms my $filename = AutoLoader::find_filename( $sub );
# spent 1.01ms making 5 calls to AutoLoader::find_filename, avg 202µs/call
31
32512µs my $save = $@;
335162µs local $!; # Do not munge the value.
34152.48ms eval { local $SIG{__DIE__}; require $filename };
3559µs if ($@) {
36126µs14µs if (substr($sub,-9) eq '::DESTROY') {
# spent 4µs making 1 call to AutoLoader::CORE:match
3721.22ms2138µs
# spent 84µs (30+54) within AutoLoader::BEGIN@37 which was called: # once (30µs+54µs) by NetAddr::IP::InetBase::BEGIN@9 at line 37
no strict 'refs';
# spent 84µs making 1 call to AutoLoader::BEGIN@37 # spent 54µ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.
46123µs19µs if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){
# spent 9µs making 1 call to AutoLoader::CORE:subst
47 eval { local $SIG{__DIE__}; require $filename };
48 }
49 }
5012µs if ($@){
51122µs19µs $@ =~ s/ at .*\n//;
# spent 9µs making 1 call to AutoLoader::CORE:subst
5212µs my $error = $@;
5312µs require Carp;
5416µs1956µs Carp::croak($error);
# spent 956µs making 1 call to Carp::croak
55 }
56 }
57410µs $@ = $save;
58
59457µs return 1;
60}
61
62
# spent 1.01ms (486µs+524µs) within AutoLoader::find_filename which was called 5 times, avg 202µs/call: # 5 times (486µs+524µs) by AutoLoader::autoload_sub at line 30, avg 202µs/call
sub find_filename {
63511µs my $sub = shift;
6459µs 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
8010126µs558µs my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/);
# spent 58µs making 5 calls to AutoLoader::CORE:match, avg 12µs/call
81581µs536µs $pkg =~ s#::#/#g;
# spent 36µs making 5 calls to AutoLoader::CORE:subst, avg 7µs/call
82533µs if (defined($filename = $INC{"$pkg.pm"})) {
83522µs if ($is_macos) {
84 $pkg =~ tr#/#:#;
85 $filename = undef
86 unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s;
87 } else {
885281µs20152µs $filename = undef
# spent 85µs making 5 calls to AutoLoader::CORE:regcomp, avg 17µs/call # spent 36µs making 10 calls to AutoLoader::CORE:substcont, avg 4µs/call # spent 31µs making 5 calls to AutoLoader::CORE:subst, avg 6µs/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
985311µs5252µs if (defined $filename and -r $filename) {
# spent 252µs making 5 calls to AutoLoader::CORE:fteread, avg 50µs/call
99453µs419µs unless ($filename =~ m|^/|s) {
# spent 19µs making 4 calls to AutoLoader::CORE:match, avg 5µ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 {
12412µs $filename = undef;
125 }
126 }
127516µs unless (defined $filename) {
128 # let C<require> do the searching
12913µs $filename = "auto/$sub.al";
130120µs18µs $filename =~ s#::#/#g;
# spent 8µs making 1 call to AutoLoader::CORE:subst
131 }
132 }
133553µs return $filename;
134}
135
136
# spent 2.85ms (2.51+344µs) within AutoLoader::import which was called 5 times, avg 571µs/call: # once (1.04ms+59µs) by Net::SSLeay::BEGIN@24 at line 24 of Net/SSLeay.pm # once (512µs+58µs) by NetAddr::IP::BEGIN@23 at line 23 of NetAddr/IP.pm # once (450µs+78µs) by NetAddr::IP::InetBase::BEGIN@9 at line 9 of NetAddr/IP/InetBase.pm # once (267µs+77µs) by Net::LibIDN::BEGIN@11 at line 11 of Net/LibIDN.pm # once (243µs+71µs) by NetAddr::IP::Util::BEGIN@9 at line 9 of NetAddr/IP/Util.pm
sub import {
137512µs my $pkg = shift;
138514µs my $callpkg = caller;
139
140 #
141 # Export symbols, but not by accident of inheritance.
142 #
143
144521µs if ($pkg eq 'AutoLoader') {
145576µs325µs if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) {
# spent 25µs making 3 calls to AutoLoader::CORE:match, avg 8µs/call
1462482µs2154µs
# spent 90µs (27+64) within AutoLoader::BEGIN@146 which was called: # once (27µs+64µs) by NetAddr::IP::InetBase::BEGIN@9 at line 146
no strict 'refs';
# spent 90µs making 1 call to AutoLoader::BEGIN@146 # spent 64µs making 1 call to strict::unimport
147645µ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
163584µs540µs (my $calldir = $callpkg) =~ s#::#/#g;
# spent 40µs making 5 calls to AutoLoader::CORE:subst, avg 8µs/call
164520µs my $path = $INC{$calldir . '.pm'};
165567µ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!
16959µs my $replaced_okay;
170521µs if ($is_macos) {
171 (my $malldir = $calldir) =~ tr#/#:#;
172 $replaced_okay = ($path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s);
173 } else {
1745417µs20279µs $replaced_okay = ($path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#);
# spent 204µs making 5 calls to AutoLoader::CORE:regcomp, avg 41µs/call # spent 38µs making 5 calls to AutoLoader::CORE:subst, avg 8µs/call # spent 37µs making 10 calls to AutoLoader::CORE:substcont, avg 4µs/call
175 }
176
177102.04ms eval { require $path; } if $replaced_okay;
178 # If that failed, try relative path with normal @INC searching.
179516µs if (!$replaced_okay or $@) {
180 $path ="auto/$calldir/autosplit.ix";
181 eval { require $path; };
182 }
183510µs if ($@) {
184 my $error = $@;
185 require Carp;
186 Carp::carp($error);
187 }
188 }
189}
190
191sub unimport {
192 my $callpkg = caller;
193
1942201µs2111µs
# spent 71µs (32+40) within AutoLoader::BEGIN@194 which was called: # once (32µs+40µs) by NetAddr::IP::InetBase::BEGIN@9 at line 194
no strict 'refs';
# spent 71µs making 1 call to AutoLoader::BEGIN@194 # spent 40µ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
20318µs1;
204
205__END__
 
# spent 252µs within AutoLoader::CORE:fteread which was called 5 times, avg 50µs/call: # 5 times (252µs+0s) by AutoLoader::find_filename at line 98, avg 50µs/call
sub AutoLoader::CORE:fteread; # opcode
# spent 106µs within AutoLoader::CORE:match which was called 13 times, avg 8µs/call: # 5 times (58µs+0s) by AutoLoader::find_filename at line 80, avg 12µs/call # 4 times (19µs+0s) by AutoLoader::find_filename at line 99, avg 5µs/call # 3 times (25µs+0s) by AutoLoader::import at line 145, avg 8µs/call # once (4µs+0s) by AutoLoader::autoload_sub at line 36
sub AutoLoader::CORE:match; # opcode
# spent 288µs within AutoLoader::CORE:regcomp which was called 10 times, avg 29µs/call: # 5 times (204µs+0s) by AutoLoader::import at line 174, avg 41µs/call # 5 times (85µs+0s) by AutoLoader::find_filename at line 88, avg 17µs/call
sub AutoLoader::CORE:regcomp; # opcode
# spent 171µs within AutoLoader::CORE:subst which was called 23 times, avg 7µs/call: # 5 times (40µs+0s) by AutoLoader::import at line 163, avg 8µs/call # 5 times (38µs+0s) by AutoLoader::import at line 174, avg 8µs/call # 5 times (36µs+0s) by AutoLoader::find_filename at line 81, avg 7µs/call # 5 times (31µs+0s) by AutoLoader::find_filename at line 88, avg 6µs/call # once (9µs+0s) by AutoLoader::autoload_sub at line 46 # once (9µs+0s) by AutoLoader::autoload_sub at line 51 # once (8µs+0s) by AutoLoader::find_filename at line 130
sub AutoLoader::CORE:subst; # opcode
# spent 73µs within AutoLoader::CORE:substcont which was called 20 times, avg 4µs/call: # 10 times (37µs+0s) by AutoLoader::import at line 174, avg 4µs/call # 10 times (36µs+0s) by AutoLoader::find_filename at line 88, avg 4µs/call
sub AutoLoader::CORE:substcont; # opcode