← Index
NYTProf Performance Profile   « line view »
For rbm/rbm
  Run on Wed Feb 12 03:38:15 2020
Reported on Wed Feb 12 04:56:35 2020

Filename/usr/lib/x86_64-linux-gnu/perl/5.28/File/Spec/Unix.pm
StatementsExecuted 476484 statements in 1.41s
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
2894243385ms638msFile::Spec::Unix::::catfileFile::Spec::Unix::catfile (xsub)
2792273377ms484msFile::Spec::Unix::::splitpathFile::Spec::Unix::splitpath
2789011277ms499msFile::Spec::Unix::::tmpdirFile::Spec::Unix::tmpdir
2789011222ms222msFile::Spec::Unix::::_cached_tmpdirFile::Spec::Unix::_cached_tmpdir
2894563177ms208msFile::Spec::Unix::::catdirFile::Spec::Unix::catdir (xsub)
2790721147ms147msFile::Spec::Unix::::catpathFile::Spec::Unix::catpath
2893121108ms108msFile::Spec::Unix::::CORE:matchFile::Spec::Unix::CORE:match (opcode)
599138584.1ms84.1msFile::Spec::Unix::::canonpathFile::Spec::Unix::canonpath (xsub)
1014229.83ms11.5msFile::Spec::Unix::::file_name_is_absoluteFile::Spec::Unix::file_name_is_absolute
1113.27ms3.53msFile::Spec::Unix::::BEGIN@4File::Spec::Unix::BEGIN@4
1111.28ms1.67msFile::Spec::Unix::::BEGIN@57File::Spec::Unix::BEGIN@57
54239µs39µsFile::Spec::Unix::::splitdirFile::Spec::Unix::splitdir
11130µs64µsFile::Spec::Unix::::_tmpdirFile::Spec::Unix::_tmpdir
11121µs21µsFile::Spec::Unix::::CORE:ftdirFile::Spec::Unix::CORE:ftdir (opcode)
11111µs13µsFile::Spec::Unix::::BEGIN@3File::Spec::Unix::BEGIN@3
2117µs7µsFile::Spec::Unix::::updirFile::Spec::Unix::updir
2116µs6µsFile::Spec::Unix::::curdirFile::Spec::Unix::curdir
1116µs38µsFile::Spec::Unix::::BEGIN@119File::Spec::Unix::BEGIN@119
1116µs6µsFile::Spec::Unix::::_cache_tmpdirFile::Spec::Unix::_cache_tmpdir
1115µs13µsFile::Spec::Unix::::BEGIN@83File::Spec::Unix::BEGIN@83
1115µs30µsFile::Spec::Unix::::BEGIN@60File::Spec::Unix::BEGIN@60
1115µs30µsFile::Spec::Unix::::BEGIN@127File::Spec::Unix::BEGIN@127
1115µs27µsFile::Spec::Unix::::BEGIN@63File::Spec::Unix::BEGIN@63
1112µs2µsFile::Spec::Unix::::CORE:ftewriteFile::Spec::Unix::CORE:ftewrite (opcode)
0000s0sFile::Spec::Unix::::_collapseFile::Spec::Unix::_collapse
0000s0sFile::Spec::Unix::::_pp_canonpathFile::Spec::Unix::_pp_canonpath
0000s0sFile::Spec::Unix::::_pp_catdirFile::Spec::Unix::_pp_catdir
0000s0sFile::Spec::Unix::::_pp_catfileFile::Spec::Unix::_pp_catfile
0000s0sFile::Spec::Unix::::_sameFile::Spec::Unix::_same
0000s0sFile::Spec::Unix::::abs2relFile::Spec::Unix::abs2rel
0000s0sFile::Spec::Unix::::case_tolerantFile::Spec::Unix::case_tolerant
0000s0sFile::Spec::Unix::::devnullFile::Spec::Unix::devnull
0000s0sFile::Spec::Unix::::joinFile::Spec::Unix::join
0000s0sFile::Spec::Unix::::no_upwardsFile::Spec::Unix::no_upwards
0000s0sFile::Spec::Unix::::pathFile::Spec::Unix::path
0000s0sFile::Spec::Unix::::rel2absFile::Spec::Unix::rel2abs
0000s0sFile::Spec::Unix::::rootdirFile::Spec::Unix::rootdir
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Spec::Unix;
2
3220µs215µs
# spent 13µs (11+2) within File::Spec::Unix::BEGIN@3 which was called: # once (11µs+2µs) by Path::Tiny::BEGIN@13 at line 3
use strict;
# spent 13µs making 1 call to File::Spec::Unix::BEGIN@3 # spent 2µs making 1 call to strict::import
42404µs13.53ms
# spent 3.53ms (3.27+260µs) within File::Spec::Unix::BEGIN@4 which was called: # once (3.27ms+260µs) by Path::Tiny::BEGIN@13 at line 4
use Cwd ();
# spent 3.53ms making 1 call to File::Spec::Unix::BEGIN@4
5
61300nsour $VERSION = '3.74';
71800ns$VERSION =~ tr/_//d;
8
9sub _pp_canonpath {
10 my ($self,$path) = @_;
11 return unless defined $path;
12
13 # Handle POSIX-style node names beginning with double slash (qnx, nto)
14 # (POSIX says: "a pathname that begins with two successive slashes
15 # may be interpreted in an implementation-defined manner, although
16 # more than two leading slashes shall be treated as a single slash.")
17 my $node = '';
18 my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto';
19
20 if ( $double_slashes_special
21 && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) {
22 $node = $1;
23 }
24 # This used to be
25 # $path =~ s|/+|/|g unless ($^O eq 'cygwin');
26 # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail
27 # (Mainly because trailing "" directories didn't get stripped).
28 # Why would cygwin avoid collapsing multiple slashes into one? --jhi
29 $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx
30 $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx
31 $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx
32 $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx
33 $path =~ s|^/\.\.$|/|; # /.. -> /
34 $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
35 return "$node$path";
36}
371400ns*canonpath = \&_pp_canonpath unless defined &canonpath;
38
39sub _pp_catdir {
40 my $self = shift;
41
42 $self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
43}
441100ns*catdir = \&_pp_catdir unless defined &catdir;
45
46sub _pp_catfile {
47 my $self = shift;
48 my $file = $self->canonpath(pop @_);
49 return $file unless @_;
50 my $dir = $self->catdir(@_);
51 $dir .= "/" unless substr($dir,-1) eq "/";
52 return $dir.$file;
53}
541100ns*catfile = \&_pp_catfile unless defined &catfile;
55
56220µs
# spent 6µs within File::Spec::Unix::curdir which was called 2 times, avg 3µs/call: # 2 times (6µs+0s) by File::Path::_rmtree at line 374 of File/Path.pm, avg 3µs/call
sub curdir { '.' }
572135µs21.71ms
# spent 1.67ms (1.28+386µs) within File::Spec::Unix::BEGIN@57 which was called: # once (1.28ms+386µs) by Path::Tiny::BEGIN@13 at line 57
use constant _fn_curdir => ".";
# spent 1.67ms making 1 call to File::Spec::Unix::BEGIN@57 # spent 39µs making 1 call to constant::import
58
59sub devnull { '/dev/null' }
60233µs254µs
# spent 30µs (5+24) within File::Spec::Unix::BEGIN@60 which was called: # once (5µs+24µs) by Path::Tiny::BEGIN@13 at line 60
use constant _fn_devnull => "/dev/null";
# spent 30µs making 1 call to File::Spec::Unix::BEGIN@60 # spent 24µs making 1 call to constant::import
61
62sub rootdir { '/' }
632121µs250µs
# spent 27µs (5+23) within File::Spec::Unix::BEGIN@63 which was called: # once (5µs+23µs) by Path::Tiny::BEGIN@13 at line 63
use constant _fn_rootdir => "/";
# spent 27µs making 1 call to File::Spec::Unix::BEGIN@63 # spent 23µs making 1 call to constant::import
64
651200nsmy ($tmpdir, %tmpenv);
66# Cache and return the calculated tmpdir, recording which env vars
67# determined it.
68
# spent 6µs within File::Spec::Unix::_cache_tmpdir which was called: # once (6µs+0s) by File::Spec::Unix::tmpdir at line 115
sub _cache_tmpdir {
6913µs @tmpenv{@_[2..$#_]} = @ENV{@_[2..$#_]};
7012µs return $tmpdir = $_[1];
71}
72# Retrieve the cached tmpdir, checking first whether relevant env vars have
73# changed and invalidated the cache.
74
# spent 222ms within File::Spec::Unix::_cached_tmpdir which was called 27890 times, avg 8µs/call: # 27890 times (222ms+0s) by File::Spec::Unix::tmpdir at line 113, avg 8µs/call
sub _cached_tmpdir {
75278907.68ms shift;
762789055.0ms local $^W;
772789079.4ms return if grep $ENV{$_} ne $tmpenv{$_}, @_;
7827890188ms return $tmpdir;
79}
80
# spent 64µs (30+34) within File::Spec::Unix::_tmpdir which was called: # once (30µs+34µs) by File::Spec::Unix::tmpdir at line 115
sub _tmpdir {
811400ns my $self = shift;
8211µs my @dirlist = @_;
834267µs221µs
# spent 13µs (5+8) within File::Spec::Unix::BEGIN@83 which was called: # once (5µs+8µs) by Path::Tiny::BEGIN@13 at line 83
my $taint = do { no strict 'refs'; ${"\cTAINT"} };
# spent 13µs making 1 call to File::Spec::Unix::BEGIN@83 # spent 8µs making 1 call to strict::unimport
8412µs if ($taint) { # Check for taint mode on perl >= 5.8.0
85 require Scalar::Util;
86 @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
87 }
88 elsif ($] < 5.007) { # No ${^TAINT} before 5.8
89 @dirlist = grep { !defined($_) || eval { eval('1'.substr $_,0,0) } }
90 @dirlist;
91 }
92
9312µs foreach (@dirlist) {
94231µs222µs next unless defined && -d && -w _;
# spent 21µs making 1 call to File::Spec::Unix::CORE:ftdir # spent 2µs making 1 call to File::Spec::Unix::CORE:ftewrite
951600ns $tmpdir = $_;
961400ns last;
97 }
981400ns $tmpdir = $self->curdir unless defined $tmpdir;
9916µs13µs $tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
# spent 3µs making 1 call to File::Spec::Unix::canonpath
10015µs19µs if ( !$self->file_name_is_absolute($tmpdir) ) {
# spent 9µs making 1 call to File::Spec::Unix::file_name_is_absolute
101 # See [perl #120593] for the full details
102 # If possible, return a full path, rather than '.' or 'lib', but
103 # jump through some hoops to avoid returning a tainted value.
104 ($tmpdir) = grep {
105 $taint ? ! Scalar::Util::tainted($_) :
106 $] < 5.007 ? eval { eval('1'.substr $_,0,0) } : 1
107 } $self->rel2abs($tmpdir), $tmpdir;
108 }
10913µs return $tmpdir;
110}
111
112
# spent 499ms (277+222) within File::Spec::Unix::tmpdir which was called 27890 times, avg 18µs/call: # 27890 times (277ms+222ms) by File::Temp::tempfile at line 1057 of File/Temp.pm, avg 18µs/call
sub tmpdir {
1132789091.5ms27890222ms my $cached = $_[0]->_cached_tmpdir('TMPDIR');
# spent 222ms making 27890 calls to File::Spec::Unix::_cached_tmpdir, avg 8µs/call
11427890153ms return $cached if defined $cached;
115112µs270µs $_[0]->_cache_tmpdir($_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ), 'TMPDIR');
# spent 64µs making 1 call to File::Spec::Unix::_tmpdir # spent 6µs making 1 call to File::Spec::Unix::_cache_tmpdir
116}
117
118216µs
# spent 7µs within File::Spec::Unix::updir which was called 2 times, avg 3µs/call: # 2 times (7µs+0s) by File::Path::_rmtree at line 375 of File/Path.pm, avg 3µs/call
sub updir { '..' }
119273µs269µs
# spent 38µs (6+32) within File::Spec::Unix::BEGIN@119 which was called: # once (6µs+32µs) by Path::Tiny::BEGIN@13 at line 119
use constant _fn_updir => "..";
# spent 38µs making 1 call to File::Spec::Unix::BEGIN@119 # spent 32µs making 1 call to constant::import
120
121sub no_upwards {
122 my $self = shift;
123 return grep(!/^\.{1,2}\z/s, @_);
124}
125
126sub case_tolerant { 0 }
1272884µs254µs
# spent 30µs (5+25) within File::Spec::Unix::BEGIN@127 which was called: # once (5µs+25µs) by Path::Tiny::BEGIN@13 at line 127
use constant _fn_case_tolerant => 0;
# spent 30µs making 1 call to File::Spec::Unix::BEGIN@127 # spent 25µs making 1 call to constant::import
128
129
# spent 11.5ms (9.83+1.67) within File::Spec::Unix::file_name_is_absolute which was called 1014 times, avg 11µs/call: # 1013 times (9.82ms+1.67ms) by Template::Provider::fetch at line 127 of Template/Provider.pm, avg 11µs/call # once (6µs+3µs) by File::Spec::Unix::_tmpdir at line 100
sub file_name_is_absolute {
13010141.19ms my ($self,$file) = @_;
131101418.1ms10141.67ms return scalar($file =~ m:^/:s);
# spent 1.67ms making 1014 calls to File::Spec::Unix::CORE:match, avg 2µs/call
132}
133
134sub path {
135 return () unless exists $ENV{PATH};
136 my @path = split(':', $ENV{PATH});
137 foreach (@path) { $_ = '.' if $_ eq '' }
138 return @path;
139}
140
141sub join {
142 my $self = shift;
143 return $self->catfile(@_);
144}
145
146
# spent 484ms (377+107) within File::Spec::Unix::splitpath which was called 27922 times, avg 17µs/call: # 27905 times (377ms+107ms) by File::Temp::_gettemp at line 306 of File/Temp.pm, avg 17µs/call # 6 times (134µs+32µs) by File::Copy::Recursive::fcopy at line 157 of File/Copy/Recursive.pm, avg 28µs/call # 6 times (83µs+44µs) by File::Copy::Recursive::fcopy at line 177 of File/Copy/Recursive.pm, avg 21µs/call # 2 times (8µs+0s) by File::Temp::_gettemp at line 277 of File/Temp.pm, avg 4µs/call # once (20µs+0s) by File::Path::_is_subdir at line 255 of File/Path.pm # once (6µs+0s) by File::Temp::tempdir at line 1155 of File/Temp.pm # once (2µs+0s) by File::Path::_is_subdir at line 256 of File/Path.pm
sub splitpath {
1472792220.9ms my ($self,$path, $nofile) = @_;
148
1492792272.0ms my ($volume,$directory,$file) = ('','','');
150
1512792224.0ms if ( $nofile ) {
152 $directory = $path;
153 }
154 else {
15527917209ms27917107ms $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
# spent 107ms making 27917 calls to File::Spec::Unix::CORE:match, avg 4µs/call
1562791751.2ms $directory = $1;
1572791732.8ms $file = $2;
158 }
159
16027922180ms return ($volume,$directory,$file);
161}
162
163
# spent 39µs within File::Spec::Unix::splitdir which was called 5 times, avg 8µs/call: # 2 times (5µs+0s) by File::Temp::_gettemp at line 281 of File/Temp.pm, avg 2µs/call # once (25µs+0s) by File::Path::_is_subdir at line 261 of File/Path.pm # once (6µs+0s) by File::Path::_is_subdir at line 262 of File/Path.pm # once (2µs+0s) by File::Temp::tempdir at line 1158 of File/Temp.pm
sub splitdir {
164562µs return split m|/|, $_[1], -1; # Preserve trailing fields
165}
166
167
# spent 147ms within File::Spec::Unix::catpath which was called 27907 times, avg 5µs/call: # 27905 times (147ms+0s) by File::Temp::_gettemp at line 309 of File/Temp.pm, avg 5µs/call # 2 times (10µs+0s) by File::Temp::_gettemp at line 298 of File/Temp.pm, avg 5µs/call
sub catpath {
1682790746.2ms my ($self,$volume,$directory,$file) = @_;
169
1702790738.5ms if ( $directory ne '' &&
171 $file ne '' &&
172 substr( $directory, -1 ) ne '/' &&
173 substr( $file, 0, 1 ) ne '/'
174 ) {
175 $directory .= "/$file" ;
176 }
177 else {
1782790710.6ms $directory .= $file ;
179 }
180
18127907134ms return $directory ;
182}
183
184sub abs2rel {
185 my($self,$path,$base) = @_;
186 $base = Cwd::getcwd() unless defined $base and length $base;
187
188 ($path, $base) = map $self->canonpath($_), $path, $base;
189
190 my $path_directories;
191 my $base_directories;
192
193 if (grep $self->file_name_is_absolute($_), $path, $base) {
194 ($path, $base) = map $self->rel2abs($_), $path, $base;
195
196 my ($path_volume) = $self->splitpath($path, 1);
197 my ($base_volume) = $self->splitpath($base, 1);
198
199 # Can't relativize across volumes
200 return $path unless $path_volume eq $base_volume;
201
202 $path_directories = ($self->splitpath($path, 1))[1];
203 $base_directories = ($self->splitpath($base, 1))[1];
204
205 # For UNC paths, the user might give a volume like //foo/bar that
206 # strictly speaking has no directory portion. Treat it as if it
207 # had the root directory for that volume.
208 if (!length($base_directories) and $self->file_name_is_absolute($base)) {
209 $base_directories = $self->rootdir;
210 }
211 }
212 else {
213 my $wd= ($self->splitpath(Cwd::getcwd(), 1))[1];
214 $path_directories = $self->catdir($wd, $path);
215 $base_directories = $self->catdir($wd, $base);
216 }
217
218 # Now, remove all leading components that are the same
219 my @pathchunks = $self->splitdir( $path_directories );
220 my @basechunks = $self->splitdir( $base_directories );
221
222 if ($base_directories eq $self->rootdir) {
223 return $self->curdir if $path_directories eq $self->rootdir;
224 shift @pathchunks;
225 return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') );
226 }
227
228 my @common;
229 while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) {
230 push @common, shift @pathchunks ;
231 shift @basechunks ;
232 }
233 return $self->curdir unless @pathchunks || @basechunks;
234
235 # @basechunks now contains the directories the resulting relative path
236 # must ascend out of before it can descend to $path_directory. If there
237 # are updir components, we must descend into the corresponding directories
238 # (this only works if they are no symlinks).
239 my @reverse_base;
240 while( defined(my $dir= shift @basechunks) ) {
241 if( $dir ne $self->updir ) {
242 unshift @reverse_base, $self->updir;
243 push @common, $dir;
244 }
245 elsif( @common ) {
246 if( @reverse_base && $reverse_base[0] eq $self->updir ) {
247 shift @reverse_base;
248 pop @common;
249 }
250 else {
251 unshift @reverse_base, pop @common;
252 }
253 }
254 }
255 my $result_dirs = $self->catdir( @reverse_base, @pathchunks );
256 return $self->canonpath( $self->catpath('', $result_dirs, '') );
257}
258
259sub _same {
260 $_[1] eq $_[2];
261}
262
263sub rel2abs {
264 my ($self,$path,$base ) = @_;
265
266 # Clean up $path
267 if ( ! $self->file_name_is_absolute( $path ) ) {
268 # Figure out the effective $base and clean it up.
269 if ( !defined( $base ) || $base eq '' ) {
270 $base = Cwd::getcwd();
271 }
272 elsif ( ! $self->file_name_is_absolute( $base ) ) {
273 $base = $self->rel2abs( $base ) ;
274 }
275 else {
276 $base = $self->canonpath( $base ) ;
277 }
278
279 # Glom them together
280 $path = $self->catdir( $base, $path ) ;
281 }
282
283 return $self->canonpath( $path ) ;
284}
285
286# Internal method to reduce xx\..\yy -> yy
287sub _collapse {
288 my($fs, $path) = @_;
289
290 my $updir = $fs->updir;
291 my $curdir = $fs->curdir;
292
293 my($vol, $dirs, $file) = $fs->splitpath($path);
294 my @dirs = $fs->splitdir($dirs);
295 pop @dirs if @dirs && $dirs[-1] eq '';
296
297 my @collapsed;
298 foreach my $dir (@dirs) {
299 if( $dir eq $updir and # if we have an updir
300 @collapsed and # and something to collapse
301 length $collapsed[-1] and # and its not the rootdir
302 $collapsed[-1] ne $updir and # nor another updir
303 $collapsed[-1] ne $curdir # nor the curdir
304 )
305 { # then
306 pop @collapsed; # collapse
307 }
308 else { # else
309 push @collapsed, $dir; # just hang onto it
310 }
311 }
312
313 return $fs->catpath($vol,
314 $fs->catdir(@collapsed),
315 $file
316 );
317}
318
31917µs1;
 
# spent 21µs within File::Spec::Unix::CORE:ftdir which was called: # once (21µs+0s) by File::Spec::Unix::_tmpdir at line 94
sub File::Spec::Unix::CORE:ftdir; # opcode
# spent 2µs within File::Spec::Unix::CORE:ftewrite which was called: # once (2µs+0s) by File::Spec::Unix::_tmpdir at line 94
sub File::Spec::Unix::CORE:ftewrite; # opcode
# spent 108ms within File::Spec::Unix::CORE:match which was called 28931 times, avg 4µs/call: # 27917 times (107ms+0s) by File::Spec::Unix::splitpath at line 155, avg 4µs/call # 1014 times (1.67ms+0s) by File::Spec::Unix::file_name_is_absolute at line 131, avg 2µs/call
sub File::Spec::Unix::CORE:match; # opcode
# spent 84.1ms within File::Spec::Unix::canonpath which was called 59913 times, avg 1µs/call: # 55780 times (72.0ms+0s) by File::Spec::Unix::catdir or File::Spec::Unix::catfile at line 1057 of File/Temp.pm, avg 1µs/call # 2056 times (3.26ms+0s) by File::Spec::Unix::catdir or File::Spec::Unix::catfile at line 525 of Template/Provider.pm, avg 2µs/call # 2025 times (8.69ms+0s) by Path::Tiny::path at line 248 of Path/Tiny.pm, avg 4µs/call # 30 times (40µs+0s) by File::Spec::Unix::catdir or File::Spec::Unix::catfile at line 1051 of File/Temp.pm, avg 1µs/call # 18 times (30µs+0s) by File::Spec::Unix::catdir or File::Spec::Unix::catfile at line 389 of File/Path.pm, avg 2µs/call # 2 times (13µs+0s) by File::Spec::Unix::catdir at line 295 of File/Temp.pm, avg 6µs/call # once (3µs+0s) by File::Spec::Unix::_tmpdir at line 99 # once (1µs+0s) by File::Spec::Unix::catdir at line 1161 of File/Temp.pm
sub File::Spec::Unix::canonpath; # xsub
# spent 208ms (177+30.7) within File::Spec::Unix::catdir which was called 28945 times, avg 7µs/call: # 27890 times (172ms+29.5ms) by File::Spec::Unix::catfile at line 1057 of File/Temp.pm, avg 7µs/call # 1028 times (4.81ms+1.17ms) by File::Spec::Unix::catfile at line 525 of Template/Provider.pm, avg 6µs/call # 15 times (88µs+12µs) by File::Spec::Unix::catfile at line 1051 of File/Temp.pm, avg 7µs/call # 9 times (41µs+11µs) by File::Spec::Unix::catfile at line 389 of File/Path.pm, avg 6µs/call # 2 times (22µs+13µs) by File::Temp::_gettemp at line 295 of File/Temp.pm, avg 17µs/call # once (9µs+1µs) by File::Temp::tempdir at line 1161 of File/Temp.pm
sub File::Spec::Unix::catdir; # xsub
# spent 638ms (385+253) within File::Spec::Unix::catfile which was called 28942 times, avg 22µs/call: # 27890 times (363ms+245ms) by File::Temp::tempfile at line 1057 of File/Temp.pm, avg 22µs/call # 1028 times (21.2ms+8.07ms) by Template::Provider::_fetch_path at line 525 of Template/Provider.pm, avg 28µs/call # 15 times (199µs+127µs) by File::Temp::tempfile at line 1051 of File/Temp.pm, avg 22µs/call # 9 times (296µs+71µs) by File::Path::_rmtree at line 389 of File/Path.pm, avg 41µs/call
sub File::Spec::Unix::catfile; # xsub