| Filename | /home/ss5/perl5/perlbrew/perls/perl-5.22.0/lib/site_perl/5.22.0/String/RewritePrefix.pm |
| Statements | Executed 12 statements in 292µs |
| Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 12µs | 282µs | String::RewritePrefix::BEGIN@11 |
| 1 | 1 | 1 | 9µs | 11µs | CHI::BEGIN@1 |
| 1 | 1 | 1 | 4µs | 18µs | CHI::BEGIN@2 |
| 1 | 1 | 1 | 2µs | 2µs | String::RewritePrefix::BEGIN@7 |
| 0 | 0 | 0 | 0s | 0s | String::RewritePrefix::__ANON__[:57] |
| 0 | 0 | 0 | 0s | 0s | String::RewritePrefix::_new_rewriter |
| 0 | 0 | 0 | 0s | 0s | String::RewritePrefix::rewrite |
| Line | State ments |
Time on line |
Calls | Time in subs |
Code |
|---|---|---|---|---|---|
| 1 | 2 | 15µs | 2 | 13µs | # spent 11µs (9+2) within CHI::BEGIN@1 which was called:
# once (9µs+2µs) by CHI::BEGIN@6 at line 1 # spent 11µs making 1 call to CHI::BEGIN@1
# spent 2µs making 1 call to strict::import |
| 2 | 2 | 40µs | 2 | 31µs | # spent 18µs (4+14) within CHI::BEGIN@2 which was called:
# once (4µs+14µs) by CHI::BEGIN@6 at line 2 # spent 18µs making 1 call to CHI::BEGIN@2
# spent 14µs making 1 call to warnings::import |
| 3 | package String::RewritePrefix; | ||||
| 4 | { | ||||
| 5 | 2 | 600ns | $String::RewritePrefix::VERSION = '0.007'; | ||
| 6 | } | ||||
| 7 | 2 | 26µs | 1 | 2µs | # spent 2µs within String::RewritePrefix::BEGIN@7 which was called:
# once (2µs+0s) by CHI::BEGIN@6 at line 7 # spent 2µs making 1 call to String::RewritePrefix::BEGIN@7 |
| 8 | # ABSTRACT: rewrite strings based on a set of known prefixes | ||||
| 9 | |||||
| 10 | # 0.972 allows \'method_name' form -- rjbs, 2010-10-25 | ||||
| 11 | 1 | 6µs | 1 | 261µs | # spent 282µs (12+270) within String::RewritePrefix::BEGIN@11 which was called:
# once (12µs+270µs) by CHI::BEGIN@6 at line 13 # spent 261µs making 1 call to Sub::Exporter::__ANON__[Sub/Exporter.pm:337] |
| 12 | exports => [ rewrite => \'_new_rewriter' ], | ||||
| 13 | 2 | 201µs | 2 | 291µs | }; # spent 282µs making 1 call to String::RewritePrefix::BEGIN@11
# spent 9µs making 1 call to UNIVERSAL::VERSION |
| 14 | |||||
| 15 | |||||
| 16 | sub rewrite { | ||||
| 17 | my ($self, $arg, @rest) = @_; | ||||
| 18 | return $self->_new_rewriter(rewrite => { prefixes => $arg })->(@rest); | ||||
| 19 | } | ||||
| 20 | |||||
| 21 | sub _new_rewriter { | ||||
| 22 | my ($self, $name, $arg) = @_; | ||||
| 23 | my $rewrites = $arg->{prefixes} || {}; | ||||
| 24 | |||||
| 25 | my @rewrites; | ||||
| 26 | for my $prefix (sort { length $b <=> length $a } keys %$rewrites) { | ||||
| 27 | push @rewrites, ($prefix, $rewrites->{$prefix}); | ||||
| 28 | } | ||||
| 29 | |||||
| 30 | return sub { | ||||
| 31 | my @result; | ||||
| 32 | |||||
| 33 | Carp::cluck("string rewriter invoked in void context") | ||||
| 34 | unless defined wantarray; | ||||
| 35 | |||||
| 36 | Carp::croak("attempt to rewrite multiple strings outside of list context") | ||||
| 37 | if @_ > 1 and ! wantarray; | ||||
| 38 | |||||
| 39 | STRING: for my $str (@_) { | ||||
| 40 | for (my $i = 0; $i < @rewrites; $i += 2) { | ||||
| 41 | if (index($str, $rewrites[$i]) == 0) { | ||||
| 42 | if (ref $rewrites[$i+1]) { | ||||
| 43 | my $rest = substr $str, length($rewrites[$i]); | ||||
| 44 | my $str = $rewrites[ $i+1 ]->($rest); | ||||
| 45 | push @result, (defined $str ? $str : '') . $rest; | ||||
| 46 | } else { | ||||
| 47 | push @result, $rewrites[$i+1] . substr $str, length($rewrites[$i]); | ||||
| 48 | } | ||||
| 49 | next STRING; | ||||
| 50 | } | ||||
| 51 | } | ||||
| 52 | |||||
| 53 | push @result, $str; | ||||
| 54 | } | ||||
| 55 | |||||
| 56 | return wantarray ? @result : $result[0]; | ||||
| 57 | }; | ||||
| 58 | } | ||||
| 59 | |||||
| 60 | 1 | 2µs | 1; | ||
| 61 | |||||
| 62 | __END__ |