File Coverage

blib/lib/YAML/Perl/Base.pm
Criterion Covered Total %
statement 676 1043 64.8
branch 492 768 64.0
condition 66 140 47.1
subroutine 24 30 80.0
pod 0 16 0.0
total 1258 1997 62.9


line stmt bran cond sub pod time code
1             package YAML::Perl::Base;
2 23     23   126 use strict;
  23         46  
  23         902  
3 23     23   543 use warnings;
  23         44  
  23         848  
4 23     23   16523 use Error ':try';
  23         82338  
  23         138  
5              
6 23     23   4980 use constant True => 1;
  23         46  
  23         1945  
7 23     23   123 use constant False => 0;
  23         51  
  23         3911  
8              
9             sub import {
10 800     800   2326 my ($class, $flag) = @_;
11 800         5078 my ($package, $module) = caller(0);
12              
13 800 100 66     9576 if ($class->isa(__PACKAGE__) and
      100        
14             defined $flag and
15             $flag eq '-base'
16             ) {
17 685         2467 $class->import_base($package, $module);
18             }
19             else {
20 115         636 require Exporter;
21 115         8654 goto &Exporter::import;
22             }
23             }
24              
25             sub import_base {
26 685     685 0 1135 my ($class, $package, $module) = @_;
27 23     23   138 no strict 'refs';
  23         52  
  23         4062  
28 685         844 push @{$package . '::ISA'}, $class;
  685         8841  
29 685         2523 $class->import_fake($package, $module);
30 685         2363 $class->export_base($package);
31             }
32              
33             sub import_fake {
34 685     685 0 2792 my ($class, $package, $module) = @_;
35 685         1274 my $inc_module = $package . '.pm';
36 685         4363 $inc_module =~ s/::/\//g;
37 685 100       2285 return if defined $INC{$inc_module};
38 550         1991 $INC{$inc_module} = $module;
39             }
40              
41             sub export_base {
42 685     685 0 978 my ($source, $target) = @_;
43 23     23   153 no strict 'refs';
  23         65  
  23         21569  
44 685 50       2087 for my $sub (map {
  6165         13630  
45             /::/ ? $_ : "${source}::$_"
46             } $source->EXPORT_BASE()) {
47 6165         9311 my $name = $sub;
48 6165         18947 $name =~ s/.*:://;
49 6165         14896 *{$target . "::$name"} = \&$sub;
  6165         177999  
50             }
51             }
52              
53             sub new {
54 2010     2010 0 4626 my $class = shift;
55 2010         8837 my $self = bless {}, $class;
56 2010         6453 $self->init(@_);
57 2010         24571 return $self;
58             }
59              
60             sub dump_object {
61 0     0 0 0 my $class = shift;
62 0         0 my $args = '(';
63 0         0 while (my ($k, $v) = splice(@_, 0, 2)) {
64 0 0       0 last unless $k;
65 0 0       0 if (not defined $v) {
    0          
    0          
66 0         0 $v = '~';
67             }
68             elsif (ref $v) {
69 0         0 $v = '@';
70             }
71             elsif (length $v > 15) {
72 0         0 $v = substr $v, 0, 15;
73             }
74 0         0 $args .= "${k}:$v,";
75             }
76 0         0 $args =~ s/,$//;
77 0         0 $args .= ')';
78             # printf "\t\t\t\t\t\t\t%s :\n%26s %s\n", (caller(2))[3], $class, $args;
79 0         0 printf "%26s %s\n", $class, $args;
80             }
81              
82             sub init {
83 2010     2010 0 2485 my $self = shift;
84 2010         7625 while (my ($property, $value) = splice(@_, 0, 2)) {
85 6127 50       29394 unless ($self->can($property)) {
86 0         0 my $class = ref $self;
87 0         0 Carp::confess("Class '$class' has no property '$property'");
88             }
89 6127         178495 $self->$property($value);
90             }
91             }
92              
93             sub create {
94 250     250 0 405 my $self = shift;
95 250         545 my $object_class = (shift) . '_class';
96 250         7544 my $module_name = $self->$object_class;
97 250         15560 eval "require $module_name";
98 250 50 33     1360 $self->die("Error in require $module_name - $@")
99             if $@ and "$@" !~ /Can't locate/;
100 250         1588 return $module_name->new;
101             }
102              
103             sub die {
104 0     0 0 0 my $self = shift;
105 0         0 Carp::confess(@_);
106             }
107              
108             my %code = (
109             sub_start =>
110             "sub {\n",
111             set_default =>
112             " \$_[0]->{%s} = %s\n unless exists \$_[0]->{%s};\n",
113             class =>
114             " return do { my \$class = \$_[0]; %s } unless ref \$_[0];\n",
115             init =>
116             " return \$_[0]->{%s} = do { my \$self = \$_[0]; %s }\n" .
117             " unless \$#_ > 0 or defined \$_[0]->{%s};\n",
118             return_if_get =>
119             " return \$_[0]->{%s} unless \$#_ > 0;\n",
120             set =>
121             " \$_[0]->{%s} = \$_[1];\n",
122             onset =>
123             " do { local \$_ = \$_[1]; my \$self = \$_[0]; %s };\n",
124             chain =>
125             " return \$_[0];\n}\n",
126             sub_end =>
127             " return \$_[0]->{%s};\n}\n",
128             );
129              
130             my $parse_arguments = sub {
131             my $paired_arguments = shift || [];
132             my ($args, @values) = ({}, ());
133             my %pairs = map { ($_, 1) } @$paired_arguments;
134             while (@_) {
135             my $elem = shift;
136             if (defined $elem and defined $pairs{$elem} and @_) {
137             $args->{$elem} = shift;
138             }
139             elsif ($elem eq '-chain') {
140             $args->{-chain} = 1;
141             }
142             else {
143             push @values, $elem;
144             }
145             }
146             return wantarray ? ($args, @values) : $args;
147             };
148              
149             my $default_as_code = sub {
150 23     23   158 no warnings 'once';
  23         58  
  23         13327  
151             require Data::Dumper;
152             local $Data::Dumper::Sortkeys = 1;
153             my $code = Data::Dumper::Dumper(shift);
154             $code =~ s/^\$VAR1 = //;
155             $code =~ s/;$//;
156             return $code;
157             };
158              
159             sub field {
160 1782     1782 0 3685 my $package = caller;
161 1782         6020 my ($args, @values) = &$parse_arguments(
162             [ qw(-package -class -init -onset) ],
163             @_,
164             );
165 1782         4921 my ($field, $default) = @values;
166 1782 50       5187 $package = $args->{-package} if defined $args->{-package};
167 1782 50       2025 return if defined &{"${package}::$field"};
  1782         16287  
168 1782 100 100     9394 my $default_string =
    100 66        
169             ( ref($default) eq 'ARRAY' and not @$default )
170             ? '[]'
171             : (ref($default) eq 'HASH' and not keys %$default )
172             ? '{}'
173             : &$default_as_code($default);
174              
175 1782         4327 my $code = $code{sub_start};
176              
177 1782 100       4994 if ($args->{-class}) {
178 72 50       279 if ($args->{-class} eq '-init') {
179 72         160 $args->{-class} = $args->{-init};
180 72         219 $args->{-class} =~ s/\$self/\$class/g;
181             }
182 72         296 my $fragment = $code{class};
183 72         305 $code .= sprintf
184             $fragment,
185             $args->{-class};
186             }
187              
188 1782 100       3875 if ($args->{-init}) {
189 243         438 my $fragment = $code{init};
190 243         1199 $code .= sprintf
191             $fragment,
192             $field,
193             $args->{-init},
194             ($field) x 4;
195             }
196 1782 100       5946 $code .= sprintf $code{set_default}, $field, $default_string, $field
197             if defined $default;
198 1782         5574 $code .= sprintf $code{return_if_get}, $field;
199 1782         3962 $code .= sprintf $code{set}, $field;
200 1782 100       4143 $code .= sprintf $code{onset}, $args->{-onset}
201             if defined $args->{-onset};
202 1782 100       3559 if (defined $args->{-chain}) {
203 136         247 $code .= $code{chain};
204             }
205             else {
206 1646         11473 $code .= sprintf $code{sub_end}, $field;
207             }
208              
209 1782 100 66 580   256938 my $sub = eval $code;
  580 100 100     4039  
  160 100 100     1714  
  139 100 66     661  
  341 100 100     2511  
  109 100 66     1054  
  109 100 66     953  
  188 100 100     2663  
  73 100 100     443  
  57 100 100     339  
  189 100 100     11112  
  80 100 66     284  
  232 100 66     2406  
  158 100 66     825  
  78 100 66     224  
  53 100 66     397  
  65 100 0     213  
  349 100 66     8548  
  149 100 33     594  
  149 100 100     2150  
  187 100 0     725  
  149 100 33     646  
  121 100 66     382  
  96 100 100     238  
  26 100 33     160  
  115 100 0     1444  
  25 100 33     80  
  449 100 33     1279  
  502 100 0     4866  
  89 100 0     475  
  68 100 0     229  
  63 100 0     362  
  407 100 0     1776  
  394 100 0     2646  
  60 100 0     245  
  70 100 0     878  
  106 100 0     450  
  60 100 0     1151  
  67 100 0     327  
  83 100 0     288  
  111 100 0     1705  
  48 100       759  
  1699 100       4866  
  1683 100       13365  
  147 100       1001  
  1785 100       5448  
  1671 100       12115  
  71 100       290  
  594 100       2723  
  773 100       4209  
  255 100       1182  
  540 100       3425  
  693 100       8186  
  105 100       428  
  567 100       3071  
  40 100       205  
  41 100       145  
  53 100       640  
  31 100       371  
  25 100       129  
  140 100       1466  
  221 100       991  
  317 100       1887  
  96 100       308  
  121 100       444  
  276 100       4531  
  56 100       465  
  48 100       177  
  181 100       525  
  470 100       2327  
  361 100       1536  
  173 100       367  
  198 100       604  
  565 100       2755  
  293 100       2543  
  759 100       10720  
  313 100       2247  
  944 100       11921  
  426 100       1406  
  466 100       2408  
  113 100       684  
  106 100       821  
  7 100       27  
  578 100       1736  
  585 100       2451  
  35 100       185  
  351 100       2216  
  1167 100       3286  
  1168 100       8040  
  412 100       1153  
  412 100       2081  
  187 100       1444  
  665 100       10487  
  223 100       909  
  336 100       2502  
  151 100       703  
  79 100       346  
  52 100       327  
  263 100       1262  
  355 100       3842  
  254 100       2604  
  185 100       476  
  323 100       2590  
  228 100       665  
  222 100       1136  
  227 100       2379  
  283 100       1230  
  252 100       2153  
  619 100       3559  
  494 100       7874  
  468 100       4781  
  314 100       1501  
  123 100       318  
  112 100       541  
  15 100       174  
  6 100       32  
  31 100       134  
  224 100       2132  
  236 100       1936  
  210 100       1731  
  568 100       3262  
  372 100       7511  
  174 100       1763  
  141 100       1732  
  413 100       5811  
  273 100       1761  
  266 100       1365  
  186 100       1444  
  98 100       428  
  123 100       1644  
  331 100       1968  
  247 100       2480  
  92 100       770  
  366 100       1714  
  72 100       387  
  42 100       115  
  111 100       475  
  87 100       598  
  408 100       18208  
  357 100       2918  
  434 100       1470  
  503 100       7895  
  121 100       1374  
  82 100       368  
  88 100       278  
  240 100       1140  
  142 100       638  
  25 100       276  
  187 100       583  
  258 100       919  
  358 100       1568  
  227 100       1482  
  108 100       398  
  268 100       2627  
  126 100       696  
  47 100       114  
  90 100       328  
  210 100       1186  
  157 100       1418  
  110 100       810  
  291 100       4004  
  149 100       427  
  150 100       928  
  411 100       2534  
  237 100       616  
  227 100       1085  
  127 100       967  
  357 100       1391  
  198 50       487  
  203 100       856  
  279 100       2638  
  145 100       2170  
  139 100       1149  
  78 100       246  
  83 50       1256  
  118 0       1829  
  254 50       1545  
  177 100       2704  
  154 100       826  
  342 100       1381  
  407 100       1358  
  336 100       1287  
  244 100       1862  
  128 100       2515  
  77 100       447  
  616 100       2047  
  556 100       4067  
  41 100       215  
  348 100       1258  
  555 100       3449  
  183 0       1866  
  167 100       948  
  245 100       932  
  318 50       1283  
  240 100       1112  
  64 100       617  
  233 100       1717  
  177 50       1816  
  1660 100       8587  
  310 100       5325  
  68 50       1278  
  1585 100       43491  
  114 50       506  
  86 100       251  
  235 100       783  
  192 0       547  
  257 0       939  
  103 100       1075  
  49 100       215  
  342 100       1781  
  25 100       77  
  39 100       1214  
  335 100       2196  
  23 100       1166  
  75 50       619  
  1146 0       7120  
  239 0       795  
  212 100       705  
  89 100       480  
  248 50       877  
  400 100       2318  
  338 100       2244  
  549 0       4285  
  240 0       1378  
  129 100       789  
  77 50       298  
  193 0       1603  
  116 50       635  
  106 0       317  
  225 100       983  
  413 50       1591  
  394 0       6729  
  209 0       584  
  183 0       1467  
  120 0       381  
  777 50       10721  
  465 0       1740  
  531 100       3556  
  340 50       1900  
  339 50       4013  
  292 0       1288  
  447 0       1363  
  648 100       9802  
  1687 100       4559  
  1689 100       13499  
  295 100       5149  
  72 50       937  
  28 0       138  
  1214 0       7385  
  223 0       654  
  243 0       898  
  116 100       5173  
  116 100       431  
  57 100       440  
  17 100       68  
  264 0       900  
  301 0       2669  
  60 100       162  
  100 100       741  
  82 100       408  
  122 50       1226  
  55 50       642  
  180 0       754  
  140 0       422  
  136 0       337  
  172 0       1861  
  196 0       674  
  240 0       1023  
  234 0       541  
  234 0       592  
  136 0       577  
  98 0       311  
  149 0       469  
  125 0       2022  
  104 0       478  
  81 0       619  
  227 0       1812  
  69 0       1361  
  22 0       143  
  48 0       425  
  81 0       646  
  140 0       458  
  167 0       640  
  116 0       604  
  89 0       1612  
  14 0       44  
  821 0       2853  
  709 0       2927  
  99 0       1189  
  78 0       576  
  247 0       1015  
  227 0       3296  
  439 0       2389  
  471 0       2930  
  171 0       1848  
  108 0       1360  
  109 0       384  
  87 0       2000  
  21 0       76  
  17 0       152  
  0 0       0  
  139 0       1765  
  392 0       1360  
  527 0       4132  
  597 0       2069  
  1014 0       4060  
  671 0       3782  
  72 0       242  
  78 0       413  
  188 0       4520  
  29 0       105  
  25 0       78  
  59 0       983  
  245 0       695  
  327 0       1504  
  277 0       1185  
  502 0       1414  
  620 0       12442  
  364 0       1225  
  182 0       392  
  306 0       2839  
  78 0       561  
  48 0       163  
  187 0       855  
  129 0       572  
  40 0       130  
  76 0       490  
  93 0       564  
  42 0       145  
  64 0       328  
  280 0       2104  
  174 0       774  
  214 0       1313  
  2104 0       12178  
  365 0       4676  
  34 0       218  
  1751 0       22839  
  31 0       156  
  51 0       245  
  129 0       465  
  113 0       1659  
  26 0       192  
  29 0       158  
  49 0       226  
  154 0       593  
  243 0       878  
  309 0       915  
  1310 0       4747  
  1195 0       13238  
  186 0       556  
  102 0       632  
  57 0       186  
  68 0       243  
  51 0       161  
  33         204  
  6         35  
  281         830  
  465         2338  
  153         602  
  143         528  
  156         822  
  86         304  
  276         906  
  618         7007  
  448         4491  
  36         110  
  53         251  
  32         118  
  33         147  
  58         379  
  87         333  
  51         927  
  72         403  
  24         121  
  47         198  
  39         167  
  27         190  
  12         60  
  35         168  
  50         118  
  50         129  
  51         220  
  45         279  
  205         523  
  205         704  
  674         3430  
  132         1221  
  97         321  
  590         3474  
  54         483  
  27         100  
  30         180  
  60         821  
  33         713  
  24         301  
  67         364  
  51         160  
  63         404  
  23         86  
  17         55  
  7         52  
  70         1259  
  35         108  
  87         228  
  212         778  
  134         497  
  80         170  
  72         165  
  217         647  
  271         1318  
  117         217  
  117         264  
  282         1873  
  180         1354  
  39         202  
  148         1853  
  74         258  
  63         162  
  206         1308  
  74         190  
  68         204  
  9         51  
  0         0  
  3         12  
  53         161  
  62         1404  
  30         105  
  48         267  
  31         288  
  77         416  
  256         773  
  272         1433  
  328         2242  
  100         451  
  7         57  
  173         1899  
  6         53  
  0         0  
  12         72  
  3         11  
  3         16  
  101         413  
  110         618  
  32         117  
  84         1935  
  62         1058  
  1         6  
  35         177  
  59         668  
  18         64  
  12         353  
  46         190  
  36         325  
  29         114  
  10         28  
  1         6  
  0         0  
  0         0  
  9         63  
  9         14  
  13         63  
  4         1201  
  1285         3504  
  1285         8365  
  95         169  
  95         229  
  55         318  
  32         251  
  26         151  
  12         52  
  160         2377  
  56         141  
  348         2072  
  79         269  
  59         244  
  299         1948  
  35         547  
  40         192  
  51         353  
  28         106  
  23         120  
  0         0  
  0         0  
  0         0  
  217         1715  
  121         2072  
  121         833  
  0         0  
  0         0  
  0         0  
  0         0  
  23         67  
  24         302  
  24         116  
  25         152  
  18         44  
  18         99  
  1641         8716  
  17         80  
  11         43  
  1650         20397  
  22         199  
  8         17  
  17         96  
  11         69  
  1         465  
  1         17  
  21         364  
  15         91  
  0         0  
  3         14  
  18         104  
  12         53  
  12         106  
  39         490  
  18         65  
  9         106  
  3         44  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  23         188  
  13         691  
  94         342  
  113         489  
  41         722  
  9         38  
  0         0  
  24         298  
  6         14  
  6         38  
  33         291  
  17         32  
  17         60  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  95         685  
  17         36  
  17         50  
  0         0  
  0         0  
  0         0  
  0         0  
  3         11  
  3         11  
  3         17  
  0         0  
  0         0  
  0         0  
  55         350  
  1         4  
  1         10  
  54         366  
  2         17  
  2         5  
  2         16  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  3         27  
  3         321  
  0         0  
  0         0  
  21         70  
  21         55  
  21         97  
  0         0  
  0         0  
  0         0  
  0         0  
  3         15  
  5         41  
  4         10  
  4         21  
  21         396  
  6         20  
  6         32  
  183         538  
  183         1405  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  5         22  
  5         15  
  4         9  
  4         10  
  9         59  
  3         11  
  3         15  
  6         96  
  3         11  
  3         16  
  0         0  
  0         0  
  0         0  
  0         0  
  13         45  
  13         72  
  1         3  
  1         5  
  2         17  
  2         63  
  0         0  
  0         0  
  1         23  
  1         3  
  1         5  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
  0         0  
210 1782 50       7782 CORE::die $@ if $@;
211 23     23   146 no strict 'refs';
  23         52  
  23         12726  
212 1782         4884 *{"${package}::$field"} = $sub;
  1782         14835  
213 1782 50       10075 return $code if defined wantarray;
214             }
215              
216             sub node_info {
217 33   50 33 0 157 my $stringify = $_[1] || 0;
218             my ($class, $type, $id) =
219             ref($_[0])
220             ? $stringify
221             ? _info("$_[0]")
222 33 50       121 : do {
    50          
223 33         166 require overload;
224 33         149 my @info = _info(overload::StrVal($_[0]));
225 33 50       143 if (ref($_[0]) eq 'Regexp') {
226 0         0 @info[0, 1] = (undef, 'REGEXP');
227             }
228 33         110 @info;
229             }
230             : scalar_info($_[0]);
231 33 50       92 ($class, $type, $id) = scalar_info("$_[0]")
232             unless $id;
233 33 50       180 return wantarray ? ($class, $type, $id) : $id;
234             }
235              
236             sub _info {
237 33     33   509 return (($_[0]) =~ qr{^(?:(.*)\=)?([^=]*)\(([^\(]*)\)$}o);
238             };
239              
240             sub scalar_info {
241 0     0 0 0 my $id = 'undef';
242 0         0 my $type = '';
243 0         0 my $ext = '-S';
244 0 0       0 if (defined $_[0]) {
245 0 0       0 if (ref(\ $_[0]) eq 'GLOB') {
246 0         0 $type = 'GLOB';
247 0         0 $ext = '';
248             }
249 0 0       0 \$_[0] =~ /\((\w+)\)$/o or CORE::die();
250 0         0 $id = "$1$ext";
251             }
252 0         0 return ('', $type, $id);
253             };
254              
255             sub _dump {
256 23     23   144 no warnings 'once';
  23         50  
  23         8593  
257 0     0   0 require YAML::XS;
258 0         0 return YAML::XS::Dump(@_);
259             }
260              
261             sub XXX {
262             # CORE::die _dump(@_);
263 0     0 0 0 require Carp;
264 0         0 Carp::confess(_dump(@_));
265             }
266              
267             sub WWW {
268 0     0 0 0 CORE::warn _dump(@_);
269 0         0 return(@_);
270             }
271              
272             sub assert {
273 153     153 0 1154 require Carp;
274 153 50       563 Carp::confess("assert failed") unless $_[0];
275             }
276              
277             sub throw {
278 1     1 0 8 require Carp;
279 1         4 my $error = (join " ", map {my $val = "$_"; $val =~ s/\s*\z//; $val} @_) . "\n";
  6         20  
  6         46  
  6         19  
280 1         337 Carp::croak($error);
281 0         0 Carp::confess($error);
282 0         0 Error::Simple->throw(@_);
283             }
284              
285             sub EXPORT_BASE {
286 685     685 0 2719 return qw(
287             YAML::Perl::Base::True
288             YAML::Perl::Base::False
289             YAML::Perl::Base::field
290             YAML::Perl::Base::XXX
291             YAML::Perl::Base::WWW
292             YAML::Perl::Base::assert
293             YAML::Perl::Base::try
294             YAML::Perl::Base::throw
295             YAML::Perl::Base::node_info
296             );
297             }
298              
299             1;
300              
301             =head1 NAME
302              
303             YAML::Perl::Base - Base Class of all YAML Components
304              
305             =head1 SYNOPSIS
306              
307             package YAML::Foo;
308             use strict;
309             use warnings;
310             use YAML::Perl::Base -base;
311              
312             field 'foo';
313             field 'bar' => 'blah';
314              
315             =head1 DESCRIPTION
316              
317             The YAML toolset is made up of a bunch of modules that are object
318             oriented. All these modules inherit from YAML::Perl::Base, directly or
319             eventually.
320              
321             YAML::Perl::Base provides the C accessor generator to all its
322             subclasses. It also provides XXX for debugging with YAML::XS.
323              
324             Additionally YAML::Perl::Base provides default C and C class
325             methods for object construction.
326              
327             =head1 AUTHOR
328              
329             Ingy döt Net
330              
331             =head1 COPYRIGHT
332              
333             Copyright (c) 2008, 2009. Ingy döt Net. All rights reserved.
334              
335             This program is free software; you can redistribute it and/or modify it
336             under the same terms as Perl itself.
337              
338             See L
339              
340             =cut