File Coverage

blib/lib/Data/Sah/Filter/perl/Code/eval.pm
Criterion Covered Total %
statement 6 13 46.1
branch n/a
condition 0 2 0.0
subroutine 2 4 50.0
pod 0 2 0.0
total 8 21 38.1


line stmt bran cond sub pod time code
1             package Data::Sah::Filter::perl::Code::eval;
2              
3 1     1   327526 use strict;
  1         3  
  1         37  
4 1     1   4 use warnings;
  1         2  
  1         268  
5              
6             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
7             our $DATE = '2023-12-20'; # DATE
8             our $DIST = 'Sah-Schemas-Code'; # DIST
9             our $VERSION = '0.003'; # VERSION
10              
11             sub meta {
12             +{
13 0     0 0   v => 1,
14             summary => "Eval a string inside 'sub { ... }' and return a coderef",
15             might_fail => 1,
16             args => {
17             # XXX use strict?
18             # XXX use warnings?
19             # XXX namespace?
20             },
21             };
22             }
23              
24             sub filter {
25 0     0 0   my %fargs = @_;
26              
27 0           my $dt = $fargs{data_term};
28 0   0       my $gen_args = $fargs{args} // {};
29              
30 0           my $res = {};
31 0           $res->{expr_filter} = join(
32             "",
33             "do {", (
34             "my \$tmp = $dt; ",
35             "if (ref \$tmp eq 'CODE') { ", (
36             "[undef, \$tmp] "),
37             "} else { ", (
38             "my \$code = eval qq(package main; sub { \$tmp }); if (\$@) { [\"Error in compiling code: \$@\", \$tmp] } else { [undef, \$code] } ",
39             "}"),
40             ),
41             "}",
42             );
43              
44 0           $res;
45             }
46              
47             1;
48             # ABSTRACT: Eval a string inside 'sub { ... }' and return a coderef
49              
50             __END__