# File lib/hiera/backend.rb, line 73
      def parse_string(data, scope, extra_data={})
        return nil unless data

        tdata = data.clone

        if tdata.is_a?(String)
          while tdata =~ /%\{(.+?)\}/
            begin
              var = $1

              val = ""

              # Puppet can return :undefined for unknown scope vars,
              # If it does then we still need to evaluate extra_data
              # before returning an empty string.
              if scope[var] && scope[var] != :undefined
                  val = scope[var]
              elsif extra_data[var]
                  val = extra_data[var]
              end
            end until val != "" || var !~ /::(.+)/

            tdata.gsub!(/%\{(::)?#{var}\}/, val)
          end
        end

        return tdata
      end