Config-Resolver
view release on metacpan or search on metacpan
lib/Config/Resolver.pm view on Meta::CPAN
if !defined $resolved_val && $self->get_warning_level eq 'error';
# Return the resolved value, defaulting undef to empty string
return ( $resolved_val // $EMPTY, $parameters );
}
# If no backend plugin exists, we can either 'croak' or just
# fall through and treat it as a literal string.
}
if ( $value =~ /\$[{]([\S]+?)[}]/xsm ) {
my %vars;
while ( $value =~ /\$[{]([\S]+?)[}]/xsmg ) {
my $p = $1;
my $v = $self->get_parameter( $parameters, $p );
{
local $SIG{__DIE__} = 'DEFAULT';
die "could not resolve [$p]\n"
if !defined $v && $self->get_warning_level eq 'error';
}
$vars{$p} = $v;
}
foreach my $k ( keys %vars ) {
if ( !exists $vars{$k} || !defined $vars{$k} ) {
$vars{$k} = q{};
print {*STDERR} "WARNING: $k is undefined!\n";
}
$value =~ s/\$[{]\Q$k\E[}]/$vars{$k}/xsmg;
}
return ( $value, $parameters );
}
if ( $value =~ /\$[{]([\S]+?)\s+([\w!=><]+)\s+(.+?)\s+\?\s+(.+?)\s+\:\s+(.+?)\s*[}]/ ) {
my %dispatch_ops = (
# Numeric
q{==} => sub { $_[0] == $_[1] },
q{!=} => sub { $_[0] != $_[1] },
q{>} => sub { $_[0] > $_[1] },
q{<} => sub { $_[0] < $_[1] },
q{>=} => sub { $_[0] >= $_[1] },
q{<=} => sub { $_[0] <= $_[1] },
# String
lib/Config/Resolver.pm view on Meta::CPAN
my $op = $2;
my $alt_true = $self->eval_arg( $4, $parameters );
my $alt_false = $self->eval_arg( $5, $parameters );
croak "Invalid operator $op in ternary"
if !exists $dispatch_ops{$op};
my $is_true = $dispatch_ops{$op}->( $lhs, $rhs );
my $val = $is_true ? $alt_true : $alt_false;
$value =~ s/\$[{]([\S]+?)\s+([\w!=><]+)\s+(.+?)\s+\?\s+(.+?)\s+\:\s+(.+?)\s*[}]/$val/;
return ( $value, $parameters );
}
return ( $value, $parameters );
}
########################################################################
sub eval_arg {
########################################################################
( run in 1.853 second using v1.01-cache-2.11-cpan-5735350b133 )