← Index
NYTProf Performance Profile   « line view »
For script/ponapi
  Run on Wed Feb 10 15:51:26 2016
Reported on Thu Feb 11 09:43:08 2016

Filename/usr/lib/perl/5.18/File/Spec/Unix.pm
StatementsExecuted 1588 statements in 2.80ms
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
7662604µs713µsFile::Spec::Unix::::canonpathFile::Spec::Unix::canonpath
611323µs726µsFile::Spec::Unix::::abs2relFile::Spec::Unix::abs2rel
4474112µs536µsFile::Spec::Unix::::catdirFile::Spec::Unix::catdir
45661109µs109µsFile::Spec::Unix::::CORE:substFile::Spec::Unix::CORE:subst (opcode)
113370µs295µsFile::Spec::Unix::::catfileFile::Spec::Unix::catfile
219453µs61µsFile::Spec::Unix::::splitpathFile::Spec::Unix::splitpath
182138µs46µsFile::Spec::Unix::::file_name_is_absoluteFile::Spec::Unix::file_name_is_absolute
572129µs29µsFile::Spec::Unix::::_sameFile::Spec::Unix::_same
154327µs27µsFile::Spec::Unix::::splitdirFile::Spec::Unix::splitdir
61126µs87µsFile::Spec::Unix::::rel2absFile::Spec::Unix::rel2abs
11123µs49µsFile::Spec::Unix::::_tmpdirFile::Spec::Unix::_tmpdir
84319µs19µsFile::Spec::Unix::::catpathFile::Spec::Unix::catpath
212116µs16µsFile::Spec::Unix::::CORE:matchFile::Spec::Unix::CORE:match (opcode)
31114µs19µsFile::Spec::Unix::::_cwdFile::Spec::Unix::_cwd
22113µs61µsFile::Spec::Unix::::tmpdirFile::Spec::Unix::tmpdir
144410µs10µsFile::Spec::Unix::::curdirFile::Spec::Unix::curdir
1118µs17µsFile::Spec::Unix::::BEGIN@3File::Spec::Unix::BEGIN@3
8228µs8µsFile::Spec::Unix::::rootdirFile::Spec::Unix::rootdir
1116µs14µsFile::Spec::Unix::::BEGIN@65File::Spec::Unix::BEGIN@65
1115µs19µsFile::Spec::Unix::::BEGIN@4File::Spec::Unix::BEGIN@4
1115µs5µsFile::Spec::Unix::::CORE:ftdirFile::Spec::Unix::CORE:ftdir (opcode)
1113µs3µsFile::Spec::Unix::::CORE:ftewriteFile::Spec::Unix::CORE:ftewrite (opcode)
1112µs2µsFile::Spec::Unix::::updirFile::Spec::Unix::updir
0000s0sFile::Spec::Unix::::_collapseFile::Spec::Unix::_collapse
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
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
3222µs226µs
# spent 17µs (8+9) within File::Spec::Unix::BEGIN@3 which was called: # once (8µs+9µs) by Module::Pluggable::Object::BEGIN@4 at line 3
use strict;
# spent 17µs making 1 call to File::Spec::Unix::BEGIN@3 # spent 9µs making 1 call to strict::import
42284µs232µs
# spent 19µs (5+14) within File::Spec::Unix::BEGIN@4 which was called: # once (5µs+14µs) by Module::Pluggable::Object::BEGIN@4 at line 4
use vars qw($VERSION);
# spent 19µs making 1 call to File::Spec::Unix::BEGIN@4 # spent 14µs making 1 call to vars::import
5
61400ns$VERSION = '3.40';
71300ns$VERSION =~ tr/_//;
8
9
# spent 713µs (604+109) within File::Spec::Unix::canonpath which was called 76 times, avg 9µs/call: # 44 times (348µs+75µs) by File::Spec::Unix::catdir at line 41, avg 10µs/call # 12 times (96µs+14µs) by File::Spec::Unix::abs2rel at line 157, avg 9µs/call # 11 times (85µs+10µs) by File::Spec::Unix::catfile at line 46, avg 9µs/call # 6 times (43µs+4µs) by File::Spec::Unix::rel2abs at line 252, avg 8µs/call # 2 times (17µs+3µs) by Path::Class::Dir::new at line 44 of Path/Class/Dir.pm, avg 10µs/call # once (15µs+2µs) by File::Spec::Unix::_tmpdir at line 80
sub canonpath {
107618µs my ($self,$path) = @_;
117610µs 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.")
177611µs my $node = '';
187641µs my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto';
19
20766µs 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
2976112µs7621µs $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx
# spent 21µs making 76 calls to File::Spec::Unix::CORE:subst, avg 280ns/call
307693µs7620µs $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx
# spent 20µs making 76 calls to File::Spec::Unix::CORE:subst, avg 263ns/call
317685µs7612µs $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx
# spent 12µs making 76 calls to File::Spec::Unix::CORE:subst, avg 161ns/call
327674µs769µs $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx
# spent 9µs making 76 calls to File::Spec::Unix::CORE:subst, avg 124ns/call
337670µs768µs $path =~ s|^/\.\.$|/|; # /.. -> /
# spent 8µs making 76 calls to File::Spec::Unix::CORE:subst, avg 105ns/call
3476112µs7638µs $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx
# spent 38µs making 76 calls to File::Spec::Unix::CORE:subst, avg 504ns/call
3576139µs return "$node$path";
36}
37
38
# spent 536µs (112+424) within File::Spec::Unix::catdir which was called 44 times, avg 12µs/call: # 20 times (53µs+194µs) by File::Spec::Functions::__ANON__[/usr/lib/perl/5.18/File/Spec/Functions.pm:43] at line 43 of File/Spec/Functions.pm, avg 12µs/call # 11 times (25µs+105µs) by File::Spec::Unix::catfile at line 48, avg 12µs/call # 5 times (12µs+47µs) by Path::Class::Dir::stringify at line 81 of Path/Class/Dir.pm, avg 12µs/call # 3 times (9µs+31µs) by File::Spec::Unix::abs2rel at line 183, avg 13µs/call # 3 times (6µs+26µs) by File::Spec::Unix::abs2rel at line 184, avg 11µs/call # once (4µs+11µs) by File::Temp::tempdir at line 1615 of File/Temp.pm # once (3µs+10µs) by File::Temp::_gettemp at line 434 of File/Temp.pm
sub catdir {
39448µs my $self = shift;
40
4144105µs44424µs $self->canonpath(join('/', @_, '')); # '' because need a trailing '/'
# spent 424µs making 44 calls to File::Spec::Unix::canonpath, avg 10µs/call
42}
43
44
# spent 295µs (70+225) within File::Spec::Unix::catfile which was called 11 times, avg 27µs/call: # 6 times (38µs+125µs) by File::Spec::Functions::__ANON__[/usr/lib/perl/5.18/File/Spec/Functions.pm:43] at line 43 of File/Spec/Functions.pm, avg 27µs/call # 4 times (22µs+72µs) by Path::Class::File::stringify at line 47 of Path/Class/File.pm, avg 23µs/call # once (9µs+29µs) by File::Temp::tempfile at line 1408 of File/Temp.pm
sub catfile {
45113µs my $self = shift;
461114µs1195µs my $file = $self->canonpath(pop @_);
# spent 95µs making 11 calls to File::Spec::Unix::canonpath, avg 9µs/call
47112µs return $file unless @_;
481113µs11130µs my $dir = $self->catdir(@_);
# spent 130µs making 11 calls to File::Spec::Unix::catdir, avg 12µs/call
49119µs $dir .= "/" unless substr($dir,-1) eq "/";
501123µs return $dir.$file;
51}
52
531424µs
# spent 10µs within File::Spec::Unix::curdir which was called 14 times, avg 743ns/call: # 6 times (5µs+0s) by File::Spec::Functions::__ANON__[/usr/lib/perl/5.18/File/Spec/Functions.pm:43] at line 43 of File/Spec/Functions.pm, avg 767ns/call # 6 times (4µs+0s) by File::Spec::Unix::abs2rel at line 202, avg 600ns/call # once (1µs+0s) by Module::Pluggable::Object::BEGIN@4 at line 1103 of File/Find.pm # once (1µs+0s) by Path::Class::File::BEGIN@8 at line 20 of Path/Class/Dir.pm
sub curdir { '.' }
54
55sub devnull { '/dev/null' }
56
57814µs
# spent 8µs within File::Spec::Unix::rootdir which was called 8 times, avg 963ns/call: # 6 times (6µs+0s) by File::Spec::Unix::abs2rel at line 191, avg 917ns/call # 2 times (2µs+0s) by Path::Class::Dir::new at line 45 of Path/Class/Dir.pm, avg 1µs/call
sub rootdir { '/' }
58
591100nsmy $tmpdir;
60
# spent 49µs (23+26) within File::Spec::Unix::_tmpdir which was called: # once (23µs+26µs) by File::Spec::Unix::tmpdir at line 86
sub _tmpdir {
611200ns return $tmpdir if defined $tmpdir;
6211µs my $self = shift;
6312µs my @dirlist = @_;
64 {
653911µs222µs
# spent 14µs (6+8) within File::Spec::Unix::BEGIN@65 which was called: # once (6µs+8µs) by Module::Pluggable::Object::BEGIN@4 at line 65
no strict 'refs';
# spent 14µs making 1 call to File::Spec::Unix::BEGIN@65 # spent 8µs making 1 call to strict::unimport
6612µs if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0
67 require Scalar::Util;
68 @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist;
69 }
70 elsif ($] < 5.007) { # No ${^TAINT} before 5.8
71 @dirlist = grep { eval { eval('1'.substr $_,0,0) } } @dirlist;
72 }
73 }
741700ns foreach (@dirlist) {
75217µs28µs next unless defined && -d && -w _;
# spent 5µs making 1 call to File::Spec::Unix::CORE:ftdir # spent 3µs making 1 call to File::Spec::Unix::CORE:ftewrite
761400ns $tmpdir = $_;
7711µs last;
78 }
791300ns $tmpdir = $self->curdir unless defined $tmpdir;
8012µs118µs $tmpdir = defined $tmpdir && $self->canonpath($tmpdir);
# spent 18µs making 1 call to File::Spec::Unix::canonpath
8113µs return $tmpdir;
82}
83
84
# spent 61µs (13+49) within File::Spec::Unix::tmpdir which was called 2 times, avg 31µs/call: # once (11µs+49µs) by File::Temp::tempdir at line 1615 of File/Temp.pm # once (2µs+0s) by File::Temp::tempfile at line 1408 of File/Temp.pm
sub tmpdir {
8524µs return $tmpdir if defined $tmpdir;
86110µs149µs $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" );
# spent 49µs making 1 call to File::Spec::Unix::_tmpdir
87}
88
8912µs
# spent 2µs within File::Spec::Unix::updir which was called: # once (2µs+0s) by Path::Class::File::BEGIN@8 at line 19 of Path/Class/Dir.pm
sub updir { '..' }
90
91sub no_upwards {
92 my $self = shift;
93 return grep(!/^\.{1,2}\z/s, @_);
94}
95
96sub case_tolerant { 0 }
97
98
# spent 46µs (38+8) within File::Spec::Unix::file_name_is_absolute which was called 18 times, avg 3µs/call: # 12 times (28µs+5µs) by File::Spec::Unix::abs2rel at line 162, avg 3µs/call # 6 times (10µs+3µs) by File::Spec::Unix::rel2abs at line 236, avg 2µs/call
sub file_name_is_absolute {
99184µs my ($self,$file) = @_;
1001857µs188µs return scalar($file =~ m:^/:s);
# spent 8µs making 18 calls to File::Spec::Unix::CORE:match, avg 439ns/call
101}
102
103sub path {
104 return () unless exists $ENV{PATH};
105 my @path = split(':', $ENV{PATH});
106 foreach (@path) { $_ = '.' if $_ eq '' }
107 return @path;
108}
109
110sub join {
111 my $self = shift;
112 return $self->catfile(@_);
113}
114
115
# spent 61µs (53+8) within File::Spec::Unix::splitpath which was called 21 times, avg 3µs/call: # 3 times (9µs+0s) by File::Spec::Unix::abs2rel at line 182, avg 3µs/call # 3 times (5µs+0s) by File::Spec::Unix::abs2rel at line 165, avg 2µs/call # 3 times (3µs+0s) by File::Spec::Unix::abs2rel at line 166, avg 1µs/call # 3 times (3µs+0s) by File::Spec::Unix::abs2rel at line 171, avg 1µs/call # 3 times (3µs+0s) by File::Spec::Unix::abs2rel at line 172, avg 1µs/call # 2 times (14µs+5µs) by Path::Class::File::new at line 21 of Path/Class/File.pm, avg 9µs/call # 2 times (4µs+0s) by Path::Class::Dir::new at line 44 of Path/Class/Dir.pm, avg 2µs/call # once (7µs+3µs) by File::Temp::_gettemp at line 445 of File/Temp.pm # once (4µs+0s) by File::Temp::_gettemp at line 416 of File/Temp.pm
sub splitpath {
116217µs my ($self,$path, $nofile) = @_;
117
118217µs my ($volume,$directory,$file) = ('','','');
119
120214µs if ( $nofile ) {
121 $directory = $path;
122 }
123 else {
124315µs38µs $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs;
# spent 8µs making 3 calls to File::Spec::Unix::CORE:match, avg 3µs/call
12534µs $directory = $1;
12632µs $file = $2;
127 }
128
1292144µs return ($volume,$directory,$file);
130}
131
132
# spent 27µs within File::Spec::Unix::splitdir which was called 15 times, avg 2µs/call: # 6 times (12µs+0s) by File::Spec::Unix::abs2rel at line 188, avg 2µs/call # 6 times (9µs+0s) by File::Spec::Unix::abs2rel at line 189, avg 1µs/call # 2 times (3µs+0s) by Path::Class::Dir::new at line 45 of Path/Class/Dir.pm, avg 1µs/call # once (3µs+0s) by File::Temp::_gettemp at line 420 of File/Temp.pm
sub splitdir {
1331542µs return split m|/|, $_[1], -1; # Preserve trailing fields
134}
135
136
# spent 19µs within File::Spec::Unix::catpath which was called 8 times, avg 2µs/call: # 5 times (10µs+0s) by Path::Class::Dir::stringify at line 81 of Path/Class/Dir.pm, avg 2µs/call # once (4µs+0s) by File::Temp::_gettemp at line 437 of File/Temp.pm # once (3µs+0s) by File::Temp::_gettemp at line 448 of File/Temp.pm # once (2µs+0s) by Path::Class::File::new at line 23 of Path/Class/File.pm
sub catpath {
13784µs my ($self,$volume,$directory,$file) = @_;
138
13984µs if ( $directory ne '' &&
140 $file ne '' &&
141 substr( $directory, -1 ) ne '/' &&
142 substr( $file, 0, 1 ) ne '/'
143 ) {
144 $directory .= "/$file" ;
145 }
146 else {
14782µs $directory .= $file ;
148 }
149
150817µs return $directory ;
151}
152
153
# spent 726µs (323+403) within File::Spec::Unix::abs2rel which was called 6 times, avg 121µs/call: # 6 times (323µs+403µs) by File::Spec::Functions::__ANON__[/usr/lib/perl/5.18/File/Spec/Functions.pm:43] at line 43 of File/Spec/Functions.pm, avg 121µs/call
sub abs2rel {
15464µs my($self,$path,$base) = @_;
15563µs $base = $self->_cwd() unless defined $base and length $base;
156
157620µs12109µs ($path, $base) = map $self->canonpath($_), $path, $base;
# spent 109µs making 12 calls to File::Spec::Unix::canonpath, avg 9µs/call
158
15961µs my $path_directories;
1606500ns my $base_directories;
161
162616µs1233µs if (grep $self->file_name_is_absolute($_), $path, $base) {
# spent 33µs making 12 calls to File::Spec::Unix::file_name_is_absolute, avg 3µs/call
16339µs687µs ($path, $base) = map $self->rel2abs($_), $path, $base;
# spent 87µs making 6 calls to File::Spec::Unix::rel2abs, avg 14µs/call
164
16534µs35µs my ($path_volume) = $self->splitpath($path, 1);
# spent 5µs making 3 calls to File::Spec::Unix::splitpath, avg 2µs/call
16633µs33µs my ($base_volume) = $self->splitpath($base, 1);
# spent 3µs making 3 calls to File::Spec::Unix::splitpath, avg 1µs/call
167
168 # Can't relativize across volumes
1693800ns return $path unless $path_volume eq $base_volume;
170
17133µs33µs $path_directories = ($self->splitpath($path, 1))[1];
# spent 3µs making 3 calls to File::Spec::Unix::splitpath, avg 1µs/call
17232µs33µs $base_directories = ($self->splitpath($base, 1))[1];
# spent 3µs making 3 calls to File::Spec::Unix::splitpath, avg 1µs/call
173
174 # For UNC paths, the user might give a volume like //foo/bar that
175 # strictly speaking has no directory portion. Treat it as if it
176 # had the root directory for that volume.
17732µs if (!length($base_directories) and $self->file_name_is_absolute($base)) {
178 $base_directories = $self->rootdir;
179 }
180 }
181 else {
182312µs628µs my $wd= ($self->splitpath($self->_cwd(), 1))[1];
# spent 19µs making 3 calls to File::Spec::Unix::_cwd, avg 6µs/call # spent 9µs making 3 calls to File::Spec::Unix::splitpath, avg 3µs/call
18333µs339µs $path_directories = $self->catdir($wd, $path);
# spent 39µs making 3 calls to File::Spec::Unix::catdir, avg 13µs/call
18433µs332µs $base_directories = $self->catdir($wd, $base);
# spent 32µs making 3 calls to File::Spec::Unix::catdir, avg 11µs/call
185 }
186
187 # Now, remove all leading components that are the same
188614µs612µs my @pathchunks = $self->splitdir( $path_directories );
# spent 12µs making 6 calls to File::Spec::Unix::splitdir, avg 2µs/call
189610µs69µs my @basechunks = $self->splitdir( $base_directories );
# spent 9µs making 6 calls to File::Spec::Unix::splitdir, avg 1µs/call
190
19167µs66µs if ($base_directories eq $self->rootdir) {
# spent 6µs making 6 calls to File::Spec::Unix::rootdir, avg 917ns/call
192 return $self->curdir if $path_directories eq $self->rootdir;
193 shift @pathchunks;
194 return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') );
195 }
196
1976900ns my @common;
198614µs65µs while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) {
# spent 5µs making 6 calls to File::Spec::Unix::_same, avg 833ns/call
1995718µs push @common, shift @pathchunks ;
2005753µs5124µs shift @basechunks ;
# spent 24µs making 51 calls to File::Spec::Unix::_same, avg 467ns/call
201 }
202621µs64µs return $self->curdir unless @pathchunks || @basechunks;
# spent 4µs making 6 calls to File::Spec::Unix::curdir, avg 600ns/call
203
204 # @basechunks now contains the directories the resulting relative path
205 # must ascend out of before it can descend to $path_directory. If there
206 # are updir components, we must descend into the corresponding directories
207 # (this only works if they are no symlinks).
208 my @reverse_base;
209 while( defined(my $dir= shift @basechunks) ) {
210 if( $dir ne $self->updir ) {
211 unshift @reverse_base, $self->updir;
212 push @common, $dir;
213 }
214 elsif( @common ) {
215 if( @reverse_base && $reverse_base[0] eq $self->updir ) {
216 shift @reverse_base;
217 pop @common;
218 }
219 else {
220 unshift @reverse_base, pop @common;
221 }
222 }
223 }
224 my $result_dirs = $self->catdir( @reverse_base, @pathchunks );
225 return $self->canonpath( $self->catpath('', $result_dirs, '') );
226}
227
228
# spent 29µs within File::Spec::Unix::_same which was called 57 times, avg 505ns/call: # 51 times (24µs+0s) by File::Spec::Unix::abs2rel at line 200, avg 467ns/call # 6 times (5µs+0s) by File::Spec::Unix::abs2rel at line 198, avg 833ns/call
sub _same {
2295768µs $_[1] eq $_[2];
230}
231
232
# spent 87µs (26+61) within File::Spec::Unix::rel2abs which was called 6 times, avg 14µs/call: # 6 times (26µs+61µs) by File::Spec::Unix::abs2rel at line 163, avg 14µs/call
sub rel2abs {
23364µs my ($self,$path,$base ) = @_;
234
235 # Clean up $path
23663µs613µs if ( ! $self->file_name_is_absolute( $path ) ) {
# spent 13µs making 6 calls to File::Spec::Unix::file_name_is_absolute, avg 2µs/call
237 # Figure out the effective $base and clean it up.
238 if ( !defined( $base ) || $base eq '' ) {
239 $base = $self->_cwd();
240 }
241 elsif ( ! $self->file_name_is_absolute( $base ) ) {
242 $base = $self->rel2abs( $base ) ;
243 }
244 else {
245 $base = $self->canonpath( $base ) ;
246 }
247
248 # Glom them together
249 $path = $self->catdir( $base, $path ) ;
250 }
251
252612µs647µs return $self->canonpath( $path ) ;
# spent 47µs making 6 calls to File::Spec::Unix::canonpath, avg 8µs/call
253}
254
255# Internal routine to File::Spec, no point in making this public since
256# it is the standard Cwd interface. Most of the platform-specific
257# File::Spec subclasses use this.
258
# spent 19µs (14+5) within File::Spec::Unix::_cwd which was called 3 times, avg 6µs/call: # 3 times (14µs+5µs) by File::Spec::Unix::abs2rel at line 182, avg 6µs/call
sub _cwd {
25931µs require Cwd;
260320µs35µs Cwd::getcwd();
# spent 5µs making 3 calls to Cwd::getcwd, avg 2µs/call
261}
262
263# Internal method to reduce xx\..\yy -> yy
264sub _collapse {
265 my($fs, $path) = @_;
266
267 my $updir = $fs->updir;
268 my $curdir = $fs->curdir;
269
270 my($vol, $dirs, $file) = $fs->splitpath($path);
271 my @dirs = $fs->splitdir($dirs);
272 pop @dirs if @dirs && $dirs[-1] eq '';
273
274 my @collapsed;
275 foreach my $dir (@dirs) {
276 if( $dir eq $updir and # if we have an updir
277 @collapsed and # and something to collapse
278 length $collapsed[-1] and # and its not the rootdir
279 $collapsed[-1] ne $updir and # nor another updir
280 $collapsed[-1] ne $curdir # nor the curdir
281 )
282 { # then
283 pop @collapsed; # collapse
284 }
285 else { # else
286 push @collapsed, $dir; # just hang onto it
287 }
288 }
289
290 return $fs->catpath($vol,
291 $fs->catdir(@collapsed),
292 $file
293 );
294}
295
29612µs1;
 
# spent 5µs within File::Spec::Unix::CORE:ftdir which was called: # once (5µs+0s) by File::Spec::Unix::_tmpdir at line 75
sub File::Spec::Unix::CORE:ftdir; # opcode
# spent 3µs within File::Spec::Unix::CORE:ftewrite which was called: # once (3µs+0s) by File::Spec::Unix::_tmpdir at line 75
sub File::Spec::Unix::CORE:ftewrite; # opcode
# spent 16µs within File::Spec::Unix::CORE:match which was called 21 times, avg 752ns/call: # 18 times (8µs+0s) by File::Spec::Unix::file_name_is_absolute at line 100, avg 439ns/call # 3 times (8µs+0s) by File::Spec::Unix::splitpath at line 124, avg 3µs/call
sub File::Spec::Unix::CORE:match; # opcode
# spent 109µs within File::Spec::Unix::CORE:subst which was called 456 times, avg 239ns/call: # 76 times (38µs+0s) by File::Spec::Unix::canonpath at line 34, avg 504ns/call # 76 times (21µs+0s) by File::Spec::Unix::canonpath at line 29, avg 280ns/call # 76 times (20µs+0s) by File::Spec::Unix::canonpath at line 30, avg 263ns/call # 76 times (12µs+0s) by File::Spec::Unix::canonpath at line 31, avg 161ns/call # 76 times (9µs+0s) by File::Spec::Unix::canonpath at line 32, avg 124ns/call # 76 times (8µs+0s) by File::Spec::Unix::canonpath at line 33, avg 105ns/call
sub File::Spec::Unix::CORE:subst; # opcode