← Index
NYTProf Performance Profile   « line view »
For bin/benchmark-perlformance
  Run on Fri Apr 17 15:31:48 2015
Reported on Fri Apr 17 15:32:03 2015

Filename/home/ss5/perl5/perlbrew/perls/tapper-perl/lib/5.16.3/FindBin.pm
StatementsExecuted 38 statements in 490µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11143µs180µsFindBin::::initFindBin::init
11119µs46µsFindBin::::BEGIN@80FindBin::BEGIN@80
1119µs34µsFindBin::::BEGIN@84FindBin::BEGIN@84
1119µs52µsFindBin::::BEGIN@83FindBin::BEGIN@83
1116µs6µsFindBin::::CORE:readlinkFindBin::CORE:readlink (opcode)
1115µs185µsFindBin::::BEGIN@166FindBin::BEGIN@166
1115µs12µsFindBin::::cwd2FindBin::cwd2
1114µs4µsFindBin::::BEGIN@85FindBin::BEGIN@85
1113µs3µsFindBin::::CORE:ftfileFindBin::CORE:ftfile (opcode)
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# FindBin.pm
2#
3# Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
4# This program is free software; you can redistribute it and/or modify it
5# under the same terms as Perl itself.
6
7=head1 NAME
8
9FindBin - Locate directory of original perl script
10
11=head1 SYNOPSIS
12
13 use FindBin;
14 use lib "$FindBin::Bin/../lib";
15
16 or
17
18 use FindBin qw($Bin);
19 use lib "$Bin/../lib";
20
21=head1 DESCRIPTION
22
23Locates the full path to the script bin directory to allow the use
24of paths relative to the bin directory.
25
26This allows a user to setup a directory tree for some software with
27directories C<< <root>/bin >> and C<< <root>/lib >>, and then the above
28example will allow the use of modules in the lib directory without knowing
29where the software tree is installed.
30
31If perl is invoked using the B<-e> option or the perl script is read from
32C<STDIN> then FindBin sets both C<$Bin> and C<$RealBin> to the current
33directory.
34
35=head1 EXPORTABLE VARIABLES
36
37 $Bin - path to bin directory from where script was invoked
38 $Script - basename of script from which perl was invoked
39 $RealBin - $Bin with all links resolved
40 $RealScript - $Script with all links resolved
41
42=head1 KNOWN ISSUES
43
44If there are two modules using C<FindBin> from different directories
45under the same interpreter, this won't work. Since C<FindBin> uses a
46C<BEGIN> block, it'll be executed only once, and only the first caller
47will get it right. This is a problem under mod_perl and other persistent
48Perl environments, where you shouldn't use this module. Which also means
49that you should avoid using C<FindBin> in modules that you plan to put
50on CPAN. To make sure that C<FindBin> will work is to call the C<again>
51function:
52
53 use FindBin;
54 FindBin::again(); # or FindBin->again;
55
56In former versions of FindBin there was no C<again> function. The
57workaround was to force the C<BEGIN> block to be executed again:
58
59 delete $INC{'FindBin.pm'};
60 require FindBin;
61
62=head1 AUTHORS
63
64FindBin is supported as part of the core perl distribution. Please send bug
65reports to E<lt>F<perlbug@perl.org>E<gt> using the perlbug program
66included with perl.
67
68Graham Barr E<lt>F<gbarr@pobox.com>E<gt>
69Nick Ing-Simmons E<lt>F<nik@tiuk.ti.com>E<gt>
70
71=head1 COPYRIGHT
72
73Copyright (c) 1995 Graham Barr & Nick Ing-Simmons. All rights reserved.
74This program is free software; you can redistribute it and/or modify it
75under the same terms as Perl itself.
76
77=cut
78
79package FindBin;
80228µs274µs
# spent 46µs (19+28) within FindBin::BEGIN@80 which was called: # once (19µs+28µs) by Benchmark::Perl::Formance::BEGIN@22 at line 80
use Carp;
# spent 46µs making 1 call to FindBin::BEGIN@80 # spent 28µs making 1 call to Exporter::import
8119µsrequire 5.000;
821300nsrequire Exporter;
83221µs296µs
# spent 52µs (9+43) within FindBin::BEGIN@83 which was called: # once (9µs+43µs) by Benchmark::Perl::Formance::BEGIN@22 at line 83
use Cwd qw(getcwd cwd abs_path);
# spent 52µs making 1 call to FindBin::BEGIN@83 # spent 43µs making 1 call to Exporter::import
84220µs259µs
# spent 34µs (9+25) within FindBin::BEGIN@84 which was called: # once (9µs+25µs) by Benchmark::Perl::Formance::BEGIN@22 at line 84
use File::Basename;
# spent 34µs making 1 call to FindBin::BEGIN@84 # spent 25µs making 1 call to Exporter::import
852293µs14µs
# spent 4µs within FindBin::BEGIN@85 which was called: # once (4µs+0s) by Benchmark::Perl::Formance::BEGIN@22 at line 85
use File::Spec;
# spent 4µs making 1 call to FindBin::BEGIN@85
86
8711µs@EXPORT_OK = qw($Bin $Script $RealBin $RealScript $Dir $RealDir);
8812µs%EXPORT_TAGS = (ALL => [qw($Bin $Script $RealBin $RealScript $Dir $RealDir)]);
8915µs@ISA = qw(Exporter);
90
911300ns$VERSION = "1.51";
92
93
94# needed for VMS-specific filename translation
951600nsif( $^O eq 'VMS' ) {
96 require VMS::Filespec;
97 VMS::Filespec->import;
98}
99
100
# spent 12µs (5+7) within FindBin::cwd2 which was called: # once (5µs+7µs) by FindBin::init at line 137
sub cwd2 {
101111µs17µs my $cwd = getcwd();
# spent 7µs making 1 call to Cwd::getcwd
102 # getcwd might fail if it hasn't access to the current directory.
103 # try harder.
1041300ns defined $cwd or $cwd = cwd();
10512µs $cwd;
106}
107
108sub init
109
# spent 180µs (43+137) within FindBin::init which was called: # once (43µs+137µs) by FindBin::BEGIN@166 at line 166
{
1101600ns *Dir = \$Bin;
1111100ns *RealDir = \$RealBin;
112
11313µs if($0 eq '-e' || $0 eq '-')
114 {
115 # perl invoked with -e or script is on C<STDIN>
116 $Script = $RealScript = $0;
117 $Bin = $RealBin = cwd2();
118 $Bin = VMS::Filespec::unixify($Bin) if $^O eq 'VMS';
119 }
120 else
121 {
1221500ns my $script = $0;
123
1241600ns if ($^O eq 'VMS')
125 {
126 ($Bin,$Script) = VMS::Filespec::rmsexpand($0) =~ /(.*[\]>\/]+)(.*)/s;
127 # C<use disk:[dev]/lib> isn't going to work, so unixify first
128 ($Bin = VMS::Filespec::unixify($Bin)) =~ s/\/\z//;
129 ($RealBin,$RealScript) = ($Bin,$Script);
130 }
131 else
132 {
13319µs13µs croak("Cannot find current script '$0'") unless(-f $script);
# spent 3µs making 1 call to FindBin::CORE:ftfile
134
135 # Ensure $script contains the complete path in case we C<chdir>
136
137111µs382µs $script = File::Spec->catfile(cwd2(), $script)
# spent 63µs making 1 call to File::Spec::Unix::catfile # spent 12µs making 1 call to FindBin::cwd2 # spent 7µs making 1 call to File::Spec::Unix::file_name_is_absolute
138 unless File::Spec->file_name_is_absolute($script);
139
14012µs118µs ($Script,$Bin) = fileparse($script);
# spent 18µs making 1 call to File::Basename::fileparse
141
142 # Resolve $script if it is a link
1431200ns while(1)
144 {
145110µs16µs my $linktext = readlink($script);
# spent 6µs making 1 call to FindBin::CORE:readlink
146
14712µs110µs ($RealScript,$RealBin) = fileparse($script);
# spent 10µs making 1 call to File::Basename::fileparse
1481600ns last unless defined $linktext;
149
150 $script = (File::Spec->file_name_is_absolute($linktext))
151 ? $linktext
152 : File::Spec->catfile($RealBin, $linktext);
153 }
154
155 # Get absolute paths to directories
1561200ns if ($Bin) {
1571200ns my $BinOld = $Bin;
158118µs114µs $Bin = abs_path($Bin);
# spent 14µs making 1 call to Cwd::abs_path
1591400ns defined $Bin or $Bin = File::Spec->canonpath($BinOld);
160 }
16117µs14µs $RealBin = abs_path($RealBin) if($RealBin);
# spent 4µs making 1 call to Cwd::abs_path
162 }
163 }
164}
165
166128µs2365µs
# spent 185µs (5+180) within FindBin::BEGIN@166 which was called: # once (5µs+180µs) by Benchmark::Perl::Formance::BEGIN@22 at line 166
BEGIN { init }
# spent 185µs making 1 call to FindBin::BEGIN@166 # spent 180µs making 1 call to FindBin::init
167
1681900ns*again = \&init;
169
17016µs1; # Keep require happy
 
# spent 3µs within FindBin::CORE:ftfile which was called: # once (3µs+0s) by FindBin::init at line 133
sub FindBin::CORE:ftfile; # opcode
# spent 6µs within FindBin::CORE:readlink which was called: # once (6µs+0s) by FindBin::init at line 145
sub FindBin::CORE:readlink; # opcode