← Index
NYTProf Performance Profile   « block view • line view • sub view »
For bin/pan_genome_post_analysis
  Run on Fri Mar 27 11:43:32 2015
Reported on Fri Mar 27 11:46:08 2015

Filename/Users/ap13/perl5/lib/perl5/File/Path.pm
StatementsExecuted 205 statements in 3.79ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
1112.99ms3.22msFile::Path::::BEGIN@6File::Path::BEGIN@6
1111.24ms1.38msFile::Path::::BEGIN@7File::Path::BEGIN@7
221400µs1.01msFile::Path::::_rmtreeFile::Path::_rmtree (recurses: max depth 1, inclusive time 604µs)
811281µs281µsFile::Path::::CORE:unlinkFile::Path::CORE:unlink (opcode)
111136µs1.29msFile::Path::::rmtreeFile::Path::rmtree
102156µs56µsFile::Path::::CORE:lstatFile::Path::CORE:lstat (opcode)
11150µs83µsFile::Path::::_is_subdirFile::Path::_is_subdir
11148µs48µsFile::Path::::CORE:rmdirFile::Path::CORE:rmdir (opcode)
11143µs43µsFile::Path::::CORE:readdirFile::Path::CORE:readdir (opcode)
11117µs17µsFile::Path::::BEGIN@3File::Path::BEGIN@3
11117µs17µsFile::Path::::CORE:open_dirFile::Path::CORE:open_dir (opcode)
11114µs14µsFile::Path::::CORE:matchFile::Path::CORE:match (opcode)
22114µs14µsFile::Path::::CORE:chdirFile::Path::CORE:chdir (opcode)
11112µs12µsFile::Path::::CORE:closedirFile::Path::CORE:closedir (opcode)
1119µs22µsFile::Path::::BEGIN@329File::Path::BEGIN@329
1117µs19µsFile::Path::::BEGIN@4File::Path::BEGIN@4
1117µs63µsFile::Path::::BEGIN@19File::Path::BEGIN@19
2217µs7µsFile::Path::::CORE:statFile::Path::CORE:stat (opcode)
1114µs4µsFile::Path::::BEGIN@8File::Path::BEGIN@8
1114µs4µsFile::Path::::BEGIN@10File::Path::BEGIN@10
1113µs3µsFile::Path::::BEGIN@18File::Path::BEGIN@18
9113µs3µsFile::Path::::CORE:ftdirFile::Path::CORE:ftdir (opcode)
1112µs2µsFile::Path::::CORE:substFile::Path::CORE:subst (opcode)
0000s0sFile::Path::::_carpFile::Path::_carp
0000s0sFile::Path::::_croakFile::Path::_croak
0000s0sFile::Path::::_errorFile::Path::_error
0000s0sFile::Path::::_mkpathFile::Path::_mkpath
0000s0sFile::Path::::_slash_lcFile::Path::_slash_lc
0000s0sFile::Path::::make_pathFile::Path::make_path
0000s0sFile::Path::::mkpathFile::Path::mkpath
0000s0sFile::Path::::remove_treeFile::Path::remove_tree
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package File::Path;
2
3244µs117µs
# spent 17µs within File::Path::BEGIN@3 which was called: # once (17µs+0s) by Bio::Root::IO::BEGIN@75 at line 3
use 5.005_04;
# spent 17µs making 1 call to File::Path::BEGIN@3
4223µs231µs
# spent 19µs (7+12) within File::Path::BEGIN@4 which was called: # once (7µs+12µs) by Bio::Root::IO::BEGIN@75 at line 4
use strict;
# spent 19µs making 1 call to File::Path::BEGIN@4 # spent 12µs making 1 call to strict::import
5
62157µs23.26ms
# spent 3.22ms (2.99+228µs) within File::Path::BEGIN@6 which was called: # once (2.99ms+228µs) by Bio::Root::IO::BEGIN@75 at line 6
use Cwd 'getcwd';
# spent 3.22ms making 1 call to File::Path::BEGIN@6 # spent 44µs making 1 call to Exporter::import
72161µs11.38ms
# spent 1.38ms (1.24+141µs) within File::Path::BEGIN@7 which was called: # once (1.24ms+141µs) by Bio::Root::IO::BEGIN@75 at line 7
use File::Basename ();
# spent 1.38ms making 1 call to File::Path::BEGIN@7
8230µs14µs
# spent 4µs within File::Path::BEGIN@8 which was called: # once (4µs+0s) by Bio::Root::IO::BEGIN@75 at line 8
use File::Spec ();
# spent 4µs making 1 call to File::Path::BEGIN@8
9
10
# spent 4µs within File::Path::BEGIN@10 which was called: # once (4µs+0s) by Bio::Root::IO::BEGIN@75 at line 16
BEGIN {
1114µs if ($] < 5.006) {
12 # can't say 'opendir my $dh, $dirname'
13 # need to initialise $dh
14 eval "use Symbol";
15 }
16114µs14µs}
# spent 4µs making 1 call to File::Path::BEGIN@10
17
18220µs13µs
# spent 3µs within File::Path::BEGIN@18 which was called: # once (3µs+0s) by Bio::Root::IO::BEGIN@75 at line 18
use Exporter ();
# spent 3µs making 1 call to File::Path::BEGIN@18
1921.48ms2118µs
# spent 63µs (7+55) within File::Path::BEGIN@19 which was called: # once (7µs+55µs) by Bio::Root::IO::BEGIN@75 at line 19
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
# spent 63µs making 1 call to File::Path::BEGIN@19 # spent 55µs making 1 call to vars::import
201700ns$VERSION = '2.09';
2116µs@ISA = qw(Exporter);
221900ns@EXPORT = qw(mkpath rmtree);
231400ns@EXPORT_OK = qw(make_path remove_tree);
24
2511µsmy $Is_VMS = $^O eq 'VMS';
261400nsmy $Is_MacOS = $^O eq 'MacOS';
27
28# These OSes complain if you want to remove a file that you have no
29# write permission to:
3012µsmy $Force_Writeable = grep {$^O eq $_} qw(amigaos dos epoc MSWin32 MacOS os2);
31
32# Unix-like systems need to stat each directory in order to detect
33# race condition. MS-Windows is immune to this particular attack.
341400nsmy $Need_Stat_Check = !($^O eq 'MSWin32');
35
36sub _carp {
37 require Carp;
38 goto &Carp::carp;
39}
40
41sub _croak {
42 require Carp;
43 goto &Carp::croak;
44}
45
46sub _error {
47 my $arg = shift;
48 my $message = shift;
49 my $object = shift;
50
51 if ($arg->{error}) {
52 $object = '' unless defined $object;
53 $message .= ": $!" if $!;
54 push @{${$arg->{error}}}, {$object => $message};
55 }
56 else {
57 _carp(defined($object) ? "$message for $object: $!" : "$message: $!");
58 }
59}
60
61sub make_path {
62 push @_, {} unless @_ and UNIVERSAL::isa($_[-1],'HASH');
63 goto &mkpath;
64}
65
66sub mkpath {
67 my $old_style = !(@_ and UNIVERSAL::isa($_[-1],'HASH'));
68
69 my $arg;
70 my $paths;
71
72 if ($old_style) {
73 my ($verbose, $mode);
74 ($paths, $verbose, $mode) = @_;
75 $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY');
76 $arg->{verbose} = $verbose;
77 $arg->{mode} = defined $mode ? $mode : 0777;
78 }
79 else {
80 $arg = pop @_;
81 $arg->{mode} = delete $arg->{mask} if exists $arg->{mask};
82 $arg->{mode} = 0777 unless exists $arg->{mode};
83 ${$arg->{error}} = [] if exists $arg->{error};
84 $arg->{owner} = delete $arg->{user} if exists $arg->{user};
85 $arg->{owner} = delete $arg->{uid} if exists $arg->{uid};
86 if (exists $arg->{owner} and $arg->{owner} =~ /\D/) {
87 my $uid = (getpwnam $arg->{owner})[2];
88 if (defined $uid) {
89 $arg->{owner} = $uid;
90 }
91 else {
92 _error($arg, "unable to map $arg->{owner} to a uid, ownership not changed");
93 delete $arg->{owner};
94 }
95 }
96 if (exists $arg->{group} and $arg->{group} =~ /\D/) {
97 my $gid = (getgrnam $arg->{group})[2];
98 if (defined $gid) {
99 $arg->{group} = $gid;
100 }
101 else {
102 _error($arg, "unable to map $arg->{group} to a gid, group ownership not changed");
103 delete $arg->{group};
104 }
105 }
106 if (exists $arg->{owner} and not exists $arg->{group}) {
107 $arg->{group} = -1; # chown will leave group unchanged
108 }
109 if (exists $arg->{group} and not exists $arg->{owner}) {
110 $arg->{owner} = -1; # chown will leave owner unchanged
111 }
112 $paths = [@_];
113 }
114 return _mkpath($arg, $paths);
115}
116
117sub _mkpath {
118 my $arg = shift;
119 my $paths = shift;
120
121 my(@created,$path);
122 foreach $path (@$paths) {
123 next unless defined($path) and length($path);
124 $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT
125 # Logic wants Unix paths, so go with the flow.
126 if ($Is_VMS) {
127 next if $path eq '/';
128 $path = VMS::Filespec::unixify($path);
129 }
130 next if -d $path;
131 my $parent = File::Basename::dirname($path);
132 unless (-d $parent or $path eq $parent) {
133 push(@created,_mkpath($arg, [$parent]));
134 }
135 print "mkdir $path\n" if $arg->{verbose};
136 if (mkdir($path,$arg->{mode})) {
137 push(@created, $path);
138 if (exists $arg->{owner}) {
139 # NB: $arg->{group} guaranteed to be set during initialisation
140 if (!chown $arg->{owner}, $arg->{group}, $path) {
141 _error($arg, "Cannot change ownership of $path to $arg->{owner}:$arg->{group}");
142 }
143 }
144 }
145 else {
146 my $save_bang = $!;
147 my ($e, $e1) = ($save_bang, $^E);
148 $e .= "; $e1" if $e ne $e1;
149 # allow for another process to have created it meanwhile
150 if (!-d $path) {
151 $! = $save_bang;
152 if ($arg->{error}) {
153 push @{${$arg->{error}}}, {$path => $e};
154 }
155 else {
156 _croak("mkdir $path: $e");
157 }
158 }
159 }
160 }
161 return @created;
162}
163
164sub remove_tree {
165 push @_, {} unless @_ and UNIVERSAL::isa($_[-1],'HASH');
166 goto &rmtree;
167}
168
169
# spent 83µs (50+33) within File::Path::_is_subdir which was called: # once (50µs+33µs) by File::Path::rmtree at line 230
sub _is_subdir {
17012µs my($dir, $test) = @_;
171
172122µs118µs my($dv, $dd) = File::Spec->splitpath($dir, 1);
# spent 18µs making 1 call to File::Spec::Unix::splitpath
17314µs13µs my($tv, $td) = File::Spec->splitpath($test, 1);
# spent 3µs making 1 call to File::Spec::Unix::splitpath
174
175 # not on same volume
1761600ns return 0 if $dv ne $tv;
177
17815µs19µs my @d = File::Spec->splitdir($dd);
# spent 9µs making 1 call to File::Spec::Unix::splitdir
17913µs12µs my @t = File::Spec->splitdir($td);
# spent 2µs making 1 call to File::Spec::Unix::splitdir
180
181 # @t can't be a subdir if it's shorter than @d
182111µs return 0 if @t < @d;
183
184 return join('/', @d) eq join('/', splice @t, 0, +@d);
185}
186
187
# spent 1.29ms (136µs+1.16) within File::Path::rmtree which was called: # once (136µs+1.16ms) by File::Temp::Dir::DESTROY at line 1616 of File/Temp.pm
sub rmtree {
188110µs13µs my $old_style = !(@_ and UNIVERSAL::isa($_[-1],'HASH'));
# spent 3µs making 1 call to UNIVERSAL::isa
189
1901200ns my $arg;
1911300ns my $paths;
192
1931600ns if ($old_style) {
1941300ns my ($verbose, $safe);
19512µs ($paths, $verbose, $safe) = @_;
19614µs $arg->{verbose} = $verbose;
19714µs $arg->{safe} = defined $safe ? $safe : 0;
198
199111µs14µs if (defined($paths) and length($paths)) {
# spent 4µs making 1 call to UNIVERSAL::isa
200 $paths = [$paths] unless UNIVERSAL::isa($paths,'ARRAY');
201 }
202 else {
203 _carp ("No root path(s) specified\n");
204 return 0;
205 }
206 }
207 else {
208 $arg = pop @_;
209 ${$arg->{error}} = [] if exists $arg->{error};
210 ${$arg->{result}} = [] if exists $arg->{result};
211 $paths = [@_];
212 }
213
21411µs $arg->{prefix} = '';
2151500ns $arg->{depth} = 0;
216
2171700ns my @clean_path;
218142µs126µs $arg->{cwd} = getcwd() or do {
# spent 26µs making 1 call to Cwd::getcwd
219 _error($arg, "cannot fetch initial working directory");
220 return 0;
221 };
222329µs114µs for ($arg->{cwd}) { /\A(.*)\Z/; $_ = $1 } # untaint
# spent 14µs making 1 call to File::Path::CORE:match
223
22414µs for my $p (@$paths) {
225 # need to fixup case and map \ to / on Windows
22617µs my $ortho_root = $^O eq 'MSWin32' ? _slash_lc($p) : $p;
22712µs my $ortho_cwd = $^O eq 'MSWin32' ? _slash_lc($arg->{cwd}) : $arg->{cwd};
2281500ns my $ortho_root_length = length($ortho_root);
2291500ns $ortho_root_length-- if $^O eq 'VMS'; # don't compare '.' with ']'
23016µs183µs if ($ortho_root_length && _is_subdir($ortho_root, $ortho_cwd)) {
# spent 83µs making 1 call to File::Path::_is_subdir
231 local $! = 0;
232 _error($arg, "cannot remove path when cwd is $arg->{cwd}", $p);
233 next;
234 }
235
23612µs if ($Is_MacOS) {
237 $p = ":$p" unless $p =~ /:/;
238 $p .= ":" unless $p =~ /:\z/;
239 }
240 elsif ($^O eq 'MSWin32') {
241 $p =~ s{[/\\]\z}{};
242 }
243 else {
24418µs12µs $p =~ s{/\z}{};
# spent 2µs making 1 call to File::Path::CORE:subst
245 }
24612µs push @clean_path, $p;
247 }
248
249130µs114µs @{$arg}{qw(device inode perm)} = (lstat $arg->{cwd})[0,1] or do {
# spent 14µs making 1 call to File::Path::CORE:lstat
250 _error($arg, "cannot stat initial working directory", $arg->{cwd});
251 return 0;
252 };
253
254124µs11.01ms return _rmtree($arg, \@clean_path);
# spent 1.01ms making 1 call to File::Path::_rmtree
255}
256
257
# spent 1.01ms (400µs+610µs) within File::Path::_rmtree which was called 2 times, avg 505µs/call: # once (241µs+770µs) by File::Path::rmtree at line 254 # once (159µs+-159µs) by File::Path::_rmtree at line 355
sub _rmtree {
25821µs my $arg = shift;
2592400ns my $paths = shift;
260
2612600ns my $count = 0;
262216µs213µs my $curdir = File::Spec->curdir();
# spent 13µs making 2 calls to File::Spec::Unix::curdir, avg 7µs/call
263228µs29µs my $updir = File::Spec->updir();
# spent 9µs making 2 calls to File::Spec::Unix::updir, avg 5µs/call
264
2652700ns my (@files, $root);
266 ROOT_DIR:
26726µs foreach $root (@$paths) {
268 # since we chdir into each directory, it may not be obvious
269 # to figure out where we are if we generate a message about
270 # a file name. We therefore construct a semi-canonical
271 # filename, anchored from the directory being unlinked (as
272 # opposed to being truly canonical, anchored from the root (/).
273
2749161µs32175µs my $canon = $arg->{prefix}
# spent 122µs making 8 calls to File::Spec::Unix::catfile, avg 15µs/call # spent 38µs making 8 calls to File::Spec::Unix::catdir, avg 5µs/call # spent 15µs making 16 calls to File::Spec::Unix::canonpath, avg 944ns/call
275 ? File::Spec->catfile($arg->{prefix}, $root)
276 : $root
277 ;
278
279972µs942µs my ($ldev, $lino, $perm) = (lstat $root)[0,1,2] or next ROOT_DIR;
# spent 42µs making 9 calls to File::Path::CORE:lstat, avg 5µs/call
280
281930µs93µs if ( -d _ ) {
# spent 3µs making 9 calls to File::Path::CORE:ftdir, avg 311ns/call
2821500ns $root = VMS::Filespec::vmspath(VMS::Filespec::pathify($root)) if $Is_VMS;
283
284124µs18µs if (!chdir($root)) {
# spent 8µs making 1 call to File::Path::CORE:chdir
285 # see if we can escalate privileges to get in
286 # (e.g. funny protection mask such as -w- instead of rwx)
287 $perm &= 07777;
288 my $nperm = $perm | 0700;
289 if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $root))) {
290 _error($arg, "cannot make child directory read-write-exec", $canon);
291 next ROOT_DIR;
292 }
293 elsif (!chdir($root)) {
294 _error($arg, "cannot chdir to child", $canon);
295 next ROOT_DIR;
296 }
297 }
298
299112µs13µs my ($cur_dev, $cur_inode, $perm) = (stat $curdir)[0,1,2] or do {
# spent 3µs making 1 call to File::Path::CORE:stat
300 _error($arg, "cannot stat current working directory", $canon);
301 next ROOT_DIR;
302 };
303
30413µs if ($Need_Stat_Check) {
305 ($ldev eq $cur_dev and $lino eq $cur_inode)
306 or _croak("directory $canon changed before chdir, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting.");
307 }
308
30919µs $perm &= 07777; # don't forget setuid, setgid, sticky bits
3101800ns my $nperm = $perm | 0700;
311
312 # notabene: 0700 is for making readable in the first place,
313 # it's also intended to change it to writable in case we have
314 # to recurse in which case we are better than rm -rf for
315 # subtrees with strange permissions
316
3171900ns if (!($arg->{safe} or $nperm == $perm or chmod($nperm, $curdir))) {
318 _error($arg, "cannot make directory read+writeable", $canon);
319 $nperm = $perm;
320 }
321
3221200ns my $d;
32314µs $d = gensym() if $] < 5.006;
324139µs117µs if (!opendir $d, $curdir) {
# spent 17µs making 1 call to File::Path::CORE:open_dir
325 _error($arg, "cannot opendir", $canon);
326 @files = ();
327 }
328 else {
3292621µs234µs
# spent 22µs (9+13) within File::Path::BEGIN@329 which was called: # once (9µs+13µs) by Bio::Root::IO::BEGIN@75 at line 329
no strict 'refs';
# spent 22µs making 1 call to File::Path::BEGIN@329 # spent 13µs making 1 call to strict::unimport
330111µs if (!defined ${"\cTAINT"} or ${"\cTAINT"}) {
331 # Blindly untaint dir names if taint mode is
332 # active, or any perl < 5.006
333 @files = map { /\A(.*)\z/s; $1 } readdir $d;
334 }
335 else {
336154µs143µs @files = readdir $d;
# spent 43µs making 1 call to File::Path::CORE:readdir
337 }
338118µs112µs closedir $d;
# spent 12µs making 1 call to File::Path::CORE:closedir
339 }
340
3411400ns if ($Is_VMS) {
342 # Deleting large numbers of files from VMS Files-11
343 # filesystems is faster if done in reverse ASCIIbetical order.
344 # include '.' to '.;' from blead patch #31775
345 @files = map {$_ eq '.' ? '.;' : $_} reverse @files;
346 }
347
34818µs @files = grep {$_ ne $updir and $_ ne $curdir} @files;
349
3501900ns if (@files) {
351 # remove the contained files before the directory itself
352112µs my $narg = {%$arg};
35316µs @{$narg}{qw(device inode cwd prefix depth)}
354 = ($cur_dev, $cur_inode, $updir, $canon, $arg->{depth}+1);
355119µs10s $count += _rmtree($narg, \@files);
# spent 604µs making 1 call to File::Path::_rmtree, recursion: max depth 1, sum of overlapping time 604µs
356 }
357
358 # restore directory permissions of required now (in case the rmdir
359 # below fails), while we are still in the directory and may do so
360 # without a race via '.'
3611600ns if ($nperm != $perm and not chmod($perm, $curdir)) {
362 _error($arg, "cannot reset chmod", $canon);
363 }
364
365 # don't leave the client code in an unexpected directory
366112µs16µs chdir($arg->{cwd})
# spent 6µs making 1 call to File::Path::CORE:chdir
367 or _croak("cannot chdir to $arg->{cwd} from $canon: $!, aborting.");
368
369 # ensure that a chdir upwards didn't take us somewhere other
370 # than we expected (see CVE-2002-0435)
37119µs14µs ($cur_dev, $cur_inode) = (stat $curdir)[0,1]
# spent 4µs making 1 call to File::Path::CORE:stat
372 or _croak("cannot stat prior working directory $arg->{cwd}: $!, aborting.");
373
37413µs if ($Need_Stat_Check) {
375 ($arg->{device} eq $cur_dev and $arg->{inode} eq $cur_inode)
376 or _croak("previous directory $arg->{cwd} changed before entering $canon, expected dev=$ldev ino=$lino, actual dev=$cur_dev ino=$cur_inode, aborting.");
377 }
378
37915µs if ($arg->{depth} or !$arg->{keep_root}) {
3801400ns if ($arg->{safe} &&
381 ($Is_VMS ? !&VMS::Filespec::candelete($root) : !-w $root)) {
382 print "skipped $root\n" if $arg->{verbose};
383 next ROOT_DIR;
384 }
3851300ns if ($Force_Writeable and !chmod $perm | 0700, $root) {
386 _error($arg, "cannot make directory writeable", $canon);
387 }
3881400ns print "rmdir $root\n" if $arg->{verbose};
389159µs148µs if (rmdir $root) {
# spent 48µs making 1 call to File::Path::CORE:rmdir
3901900ns push @{${$arg->{result}}}, $root if $arg->{result};
3911500ns ++$count;
392 }
393 else {
394 _error($arg, "cannot remove directory", $canon);
395 if ($Force_Writeable && !chmod($perm, ($Is_VMS ? VMS::Filespec::fileify($root) : $root))
396 ) {
397 _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon);
398 }
399 }
400 }
401 }
402 else {
403 # not a directory
40481µs $root = VMS::Filespec::vmsify("./$root")
405 if $Is_VMS
406 && !File::Spec->file_name_is_absolute($root)
407 && ($root !~ m/(?<!\^)[\]>]+/); # not already in VMS syntax
408
40983µs if ($arg->{safe} &&
410 ($Is_VMS ? !&VMS::Filespec::candelete($root)
411 : !(-l $root || -w $root)))
412 {
413 print "skipped $root\n" if $arg->{verbose};
414 next ROOT_DIR;
415 }
416
41783µs my $nperm = $perm & 07777 | 0600;
4188900ns if ($Force_Writeable and $nperm != $perm and not chmod $nperm, $root) {
419 _error($arg, "cannot make file writeable", $canon);
420 }
42181µs print "unlink $canon\n" if $arg->{verbose};
422 # delete all versions under VMS
42381µs for (;;) {
4248308µs8281µs if (unlink $root) {
# spent 281µs making 8 calls to File::Path::CORE:unlink, avg 35µs/call
425 push @{${$arg->{result}}}, $root if $arg->{result};
426 }
427 else {
428 _error($arg, "cannot unlink file", $canon);
429 $Force_Writeable and chmod($perm, $root) or
430 _error($arg, sprintf("cannot restore permissions to 0%o",$perm), $canon);
431 last;
432 }
43381µs ++$count;
43486µs last unless $Is_VMS && lstat $root;
435 }
436 }
437 }
438216µs return $count;
439}
440
441sub _slash_lc {
442 # fix up slashes and case on MSWin32 so that we can determine that
443 # c:\path\to\dir is underneath C:/Path/To
444 my $path = shift;
445 $path =~ tr{\\}{/};
446 return lc($path);
447}
448
449113µs1;
450__END__
 
# spent 14µs within File::Path::CORE:chdir which was called 2 times, avg 7µs/call: # once (8µs+0s) by File::Path::_rmtree at line 284 # once (6µs+0s) by File::Path::_rmtree at line 366
sub File::Path::CORE:chdir; # opcode
# spent 12µs within File::Path::CORE:closedir which was called: # once (12µs+0s) by File::Path::_rmtree at line 338
sub File::Path::CORE:closedir; # opcode
# spent 3µs within File::Path::CORE:ftdir which was called 9 times, avg 311ns/call: # 9 times (3µs+0s) by File::Path::_rmtree at line 281, avg 311ns/call
sub File::Path::CORE:ftdir; # opcode
# spent 56µs within File::Path::CORE:lstat which was called 10 times, avg 6µs/call: # 9 times (42µs+0s) by File::Path::_rmtree at line 279, avg 5µs/call # once (14µs+0s) by File::Path::rmtree at line 249
sub File::Path::CORE:lstat; # opcode
# spent 14µs within File::Path::CORE:match which was called: # once (14µs+0s) by File::Path::rmtree at line 222
sub File::Path::CORE:match; # opcode
# spent 17µs within File::Path::CORE:open_dir which was called: # once (17µs+0s) by File::Path::_rmtree at line 324
sub File::Path::CORE:open_dir; # opcode
# spent 43µs within File::Path::CORE:readdir which was called: # once (43µs+0s) by File::Path::_rmtree at line 336
sub File::Path::CORE:readdir; # opcode
# spent 48µs within File::Path::CORE:rmdir which was called: # once (48µs+0s) by File::Path::_rmtree at line 389
sub File::Path::CORE:rmdir; # opcode
# spent 7µs within File::Path::CORE:stat which was called 2 times, avg 3µs/call: # once (4µs+0s) by File::Path::_rmtree at line 371 # once (3µs+0s) by File::Path::_rmtree at line 299
sub File::Path::CORE:stat; # opcode
# spent 2µs within File::Path::CORE:subst which was called: # once (2µs+0s) by File::Path::rmtree at line 244
sub File::Path::CORE:subst; # opcode
# spent 281µs within File::Path::CORE:unlink which was called 8 times, avg 35µs/call: # 8 times (281µs+0s) by File::Path::_rmtree at line 424, avg 35µs/call
sub File::Path::CORE:unlink; # opcode