File | /usr/local/lib/perl5/5.10.1/if.pm |
Statements Executed | 30 |
Statement Execution Time | 80µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
3 | 1 | 1 | 37µs | 46µs | work | if::
3 | 3 | 2 | 13µs | 13µs | import | if::
2 | 1 | 2 | 6µs | 6µs | CORE:subst (opcode) | if::
0 | 0 | 0 | 0s | 0s | unimport | if::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package if; | ||||
2 | |||||
3 | 1 | 500ns | $VERSION = '0.05'; | ||
4 | |||||
5 | # spent 46µs (37+9) within if::work which was called 3 times, avg 15µs/call:
# 3 times (37µs+9µs) by Class::ISA::BEGIN@8 or Moose::Object::BEGIN@12 or Moose::Object::BEGIN@13 at line 18, avg 15µs/call | ||||
6 | 3 | 2µs | my $method = shift() ? 'import' : 'unimport'; | ||
7 | 3 | 2µs | die "Too few arguments to `use if' (some code returning an empty list in list context?)" | ||
8 | unless @_ >= 2; | ||||
9 | 3 | 5µs | return unless shift; # CONDITION | ||
10 | |||||
11 | 2 | 500ns | my $p = $_[0]; # PACKAGE | ||
12 | 2 | 12µs | 2 | 6µs | (my $file = "$p.pm") =~ s!::!/!g; # spent 6µs making 2 calls to if::CORE:subst, avg 3µs/call |
13 | 2 | 900ns | require $file; # Works even if $_[0] is a keyword (like open) | ||
14 | 2 | 22µs | 2 | 3µs | my $m = $p->can($method); # spent 3µs making 2 calls to UNIVERSAL::can, avg 2µs/call |
15 | 2 | 8µs | 1 | 1.10ms | goto &$m if $m; # spent 1.10ms making 1 call to metaclass::import |
16 | } | ||||
17 | |||||
18 | 9 | 24µs | 3 | 46µs | # spent 13µs within if::import which was called 3 times, avg 4µs/call:
# once (6µs+0s) by Class::ISA::BEGIN@8 at line 8 of Class/ISA.pm
# once (4µs+0s) by Moose::Object::BEGIN@12 at line 12 of Moose/Object.pm
# once (3µs+0s) by Moose::Object::BEGIN@13 at line 13 of Moose/Object.pm # spent 46µs making 3 calls to if::work, avg 15µs/call |
19 | sub unimport { shift; unshift @_, 0; goto &work } | ||||
20 | |||||
21 | 1 | 3µs | 1; | ||
22 | __END__ | ||||
23 | |||||
24 | =head1 NAME | ||||
25 | |||||
26 | if - C<use> a Perl module if a condition holds | ||||
27 | |||||
28 | =head1 SYNOPSIS | ||||
29 | |||||
30 | use if CONDITION, MODULE => ARGUMENTS; | ||||
31 | |||||
32 | =head1 DESCRIPTION | ||||
33 | |||||
34 | The construct | ||||
35 | |||||
36 | use if CONDITION, MODULE => ARGUMENTS; | ||||
37 | |||||
38 | has no effect unless C<CONDITION> is true. In this case the effect is | ||||
39 | the same as of | ||||
40 | |||||
41 | use MODULE ARGUMENTS; | ||||
42 | |||||
43 | Above C<< => >> provides necessary quoting of C<MODULE>. If not used (e.g., | ||||
44 | no ARGUMENTS to give), you'd better quote C<MODULE> yourselves. | ||||
45 | |||||
46 | =head1 BUGS | ||||
47 | |||||
48 | The current implementation does not allow specification of the | ||||
49 | required version of the module. | ||||
50 | |||||
51 | =head1 AUTHOR | ||||
52 | |||||
53 | Ilya Zakharevich L<mailto:perl-module-if@ilyaz.org>. | ||||
54 | |||||
55 | =cut | ||||
56 | |||||
# spent 6µs within if::CORE:subst which was called 2 times, avg 3µs/call:
# 2 times (6µs+0s) by if::work at line 12 of if.pm, avg 3µs/call |