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 )