File Coverage

blib/arch/Panda/Lib.pm
Criterion Covered Total %
statement 53 55 96.3
branch 25 32 78.1
condition 1 2 50.0
subroutine 10 10 100.0
pod 0 3 0.0
total 89 102 87.2


line stmt bran cond sub pod time code
1             package Panda::Lib;
2 11     11   441639 use parent 'Panda::Export';
  11         4098  
  11         70  
3 11     11   91721 use 5.012;
  11         44  
4 11     11   6523 use Encode();
  11         130727  
  11         1748  
5 11     11   10808 use Time::HiRes();
  11         18371  
  11         646  
6              
7             our $VERSION = '1.3.8';
8              
9             use Panda::Export
10 11         856 MERGE_ARRAY_CONCAT => 1,
11             MERGE_ARRAY_MERGE => 2,
12             MERGE_COPY_DEST => 4,
13             MERGE_LAZY => 8,
14             MERGE_SKIP_UNDEF => 16,
15             MERGE_DELETE_UNDEF => 32,
16 11     11   88 MERGE_COPY_SOURCE => 64;
  11         1451  
17             use Panda::Export
18 11     11   87 MERGE_COPY => MERGE_COPY_DEST | MERGE_COPY_SOURCE;
  11         31  
  11         6447  
19            
20             require Panda::XSLoader;
21             Panda::XSLoader::bootstrap();
22              
23             *hash_cmp = *compare; # for compability
24              
25             sub timeout {
26 2     2 0 1413 my ($sub, $timeout) = @_;
27 2 50       9 if (state $in_debugger = defined $DB::header) { $sub->(); return 1 }
  0         0  
  0         0  
28 2         5 my ($ok, $alarm, $error);
29 2     1   56 local $SIG{ALRM} = sub {$alarm = 1; die "ALARM!"};
  1         100117  
  1         23  
30 2   50     32 Time::HiRes::alarm($timeout || 1);
31 2         7 eval {
32 2 100       4 eval { $sub->(); 1 } or do { $error = $@ };
  2         9  
  1         7  
  1         36  
33 2         26 Time::HiRes::alarm(0);
34             };
35 2 100       32 return if $alarm;
36 1 50       5 die $error if $error;
37 1         22 return 1;
38             }
39              
40             sub encode_utf8_struct {
41 3     3 0 12647 my $data = shift;
42 3 100       8 if (ref($data) eq 'HASH') {
    50          
43 2         5 foreach my $v (values %$data) {
44 3 100       27 if (ref $v) { encode_utf8_struct($v) }
  1 50       4  
45 2         6 elsif (utf8::is_utf8($v)) { $v = Encode::encode_utf8($v) }
46             }
47             }
48             elsif (ref($data) eq 'ARRAY') {
49             map {
50 1 100       2 if (ref $_) { encode_utf8_struct($_) }
  4 100       19  
  1         3  
51 1         2 elsif (utf8::is_utf8($_)) { $_ = Encode::encode_utf8($_) }
52             } @$data;
53             }
54             }
55              
56              
57             sub decode_utf8_struct {
58 3     3 0 633 my $data = shift;
59 3 100       8 if (ref($data) eq 'HASH') {
    50          
60 2         5 foreach my $v (values %$data) {
61 3 100       23 if (ref $v) { decode_utf8_struct($v) }
  1 50       4  
62 2         3 elsif (!utf8::is_utf8($v)) { $v = Encode::decode_utf8($v) }
63             }
64             }
65             elsif (ref($data) eq 'ARRAY') {
66             map {
67 1 100       2 if (ref $_) { decode_utf8_struct($_) }
  4 50       55  
  1         4  
68 3         7 elsif (!utf8::is_utf8($_)) { $_ = Encode::decode_utf8($_) }
69             } @$data;
70             }
71             }
72              
73             1;