File Coverage

blib/lib/Petal/CodePerl/Expr/Alternate.pm
Criterion Covered Total %
statement 34 34 100.0
branch 4 4 100.0
condition n/a
subroutine 6 6 100.0
pod 0 2 0.0
total 44 46 95.6


line stmt bran cond sub pod time code
1 2     2   13 use strict;
  2         5  
  2         76  
2 2     2   14 use warnings;
  2         3  
  2         95  
3              
4             package Petal::CodePerl::Expr::Alternate;
5              
6 2     2   12 use base qw( Code::Perl::Expr::Base );
  2         4  
  2         234  
7              
8             use Class::MethodMaker (
9 2         16 get_set => [qw( -java Paths )]
10 2     2   14 );
  2         17  
11              
12             sub eval
13             {
14 3     3 0 1278 my $self = shift;
15              
16 3         5 my @paths = @{$self->getPaths};
  3         84  
17              
18 3         35 my $last = pop @paths;
19              
20 3         6 foreach my $path (@paths)
21             {
22 2         5 my $res = eval {$path->eval};
  2         11  
23 2 100       141 next if $@;
24 1         4 return $res;
25             }
26              
27 2         14 return $last->eval;
28             }
29              
30             sub perl
31             {
32 3     3 0 3263 my $self = shift;
33              
34 3         5 my @paths = @{$self->getPaths};
  3         86  
35              
36 3         42 my $last = pop @paths;
37              
38 3         14 my $last_perl = $last->perl;
39 3 100       98 if (not @paths)
40             {
41 1         4 return $last_perl;
42             }
43             else
44             {
45 3         13 my @evals = map {
46 2         4 my $path_perl = $_->perl;
47 3         231 qq{eval{\$v = $path_perl}; last unless \$@}
48             } @paths;
49 2         7 my $evals = join(";", @evals);
50              
51 2         9 return qq{do{my \$v;for (1){$evals;\$v = $last_perl} \$v}}
52             }
53             }
54              
55             1;