File Coverage

blib/lib/YAML/Safe.pm
Criterion Covered Total %
statement 39 54 72.2
branch 3 4 75.0
condition 1 3 33.3
subroutine 10 11 90.9
pod n/a
total 53 72 73.6


line stmt bran cond sub pod time code
1 50     50   426901 use strict; use warnings;
  50     50   82  
  50         1356  
  50         202  
  50         64  
  50         3865  
2              
3             package YAML::Safe;
4             our $VERSION = '0.84';
5             our $XS_VERSION = $VERSION;
6             $VERSION = eval $VERSION;
7              
8 50     50   274 use base 'Exporter';
  50         94  
  50         1075  
9             @YAML::Safe::EXPORT = qw(Load Dump);
10             @YAML::Safe::EXPORT_OK = qw(LoadFile DumpFile NO_WRAP);
11             %YAML::Safe::EXPORT_TAGS = (
12             all => [qw(Dump Load LoadFile DumpFile)],
13             );
14              
15 50     50   475 use constant NO_WRAP => 0xFFFF;
  50         65  
  50         2811  
16              
17 50     50   212 use XSLoader;
  50         105  
  50         25273  
18              
19             # XXX The following code should be moved from Perl to C.
20             $YAML::Safe::coderef2text = sub {
21             my $coderef = shift;
22             require B::Deparse;
23             my $deparse = B::Deparse->new();
24             my $text;
25             eval {
26             local $^W = 0;
27             $text = $deparse->coderef2text($coderef);
28             };
29             if ($@) {
30             warn "YAML::Safe failed to dump code ref:\n$@";
31             return;
32             }
33             $text =~ s[BEGIN \{\$\{\^WARNING_BITS\} = "UUUUUUUUUUUU\\001"\}]
34             [use warnings;]g;
35              
36             return $text;
37             };
38              
39             $YAML::Safe::glob2hash = sub {
40             my $hash = {};
41             for my $type (qw(PACKAGE NAME SCALAR ARRAY HASH CODE IO)) {
42             my $value = *{$_[0]}{$type};
43             $value = $$value if $type eq 'SCALAR';
44             if (defined $value) {
45             if ($type eq 'IO') {
46             my @stats = qw(device inode mode links uid gid rdev size
47             atime mtime ctime blksize blocks);
48             undef $value;
49             $value->{stat} = {};
50             map {$value->{stat}{shift @stats} = $_} stat(*{$_[0]});
51             $value->{fileno} = fileno(*{$_[0]});
52             {
53             local $^W;
54             $value->{tell} = tell(*{$_[0]});
55             }
56             }
57             $hash->{$type} = $value;
58             }
59             }
60             return $hash;
61             };
62              
63             use constant _QR_MAP => {
64 5         68 '' => sub { qr{$_[0]} },
65 0         0 x => sub { qr{$_[0]}x },
66 0         0 i => sub { qr{$_[0]}i },
67 0         0 s => sub { qr{$_[0]}s },
68 0         0 m => sub { qr{$_[0]}m },
69 0         0 ix => sub { qr{$_[0]}ix },
70 0         0 sx => sub { qr{$_[0]}sx },
71 0         0 mx => sub { qr{$_[0]}mx },
72 0         0 si => sub { qr{$_[0]}si },
73 1         13 mi => sub { qr{$_[0]}mi },
74 0         0 ms => sub { qr{$_[0]}sm },
75 0         0 six => sub { qr{$_[0]}six },
76 0         0 mix => sub { qr{$_[0]}mix },
77 0         0 msx => sub { qr{$_[0]}msx },
78 0         0 msi => sub { qr{$_[0]}msi },
79 2         54 msix => sub { qr{$_[0]}msix },
80 50     50   301 };
  50         60  
  50         17200  
81              
82             sub __qr_loader {
83 11 100   11   285357 if ($_[0] =~ /\A \(\? ([\^uixsm]*) (?:- (?:[ixsm]*))? : (.*) \) \z/x) {
84 8         28 my ($flags, $re) = ($1, $2);
85 8         20 $flags =~ s/^\^//;
86 8         16 $flags =~ tr/u//d;
87 8   33     26 my $sub = _QR_MAP->{$flags} || _QR_MAP->{''};
88 8         17 my $qr = &$sub($re);
89 8         92 return $qr;
90             }
91 3         74 return qr/$_[0]/;
92             }
93              
94             sub __code_loader {
95 5     5   429 my ($string) = @_;
96 5     1   293 my $sub = eval "sub $string";
  1     1   56  
  1         3  
  1         67  
  1         4  
  1         1  
  1         29  
97 5 50       14 if ($@) {
98 0         0 warn "YAML::Safe failed to load sub: $@";
99 0     0   0 return sub {};
100             }
101 5         68 return $sub;
102             }
103              
104             XSLoader::load 'YAML::Safe', $XS_VERSION;
105              
106             1;
107             __END__