throws Throwable
  public static Value str_replace(Env env,                                  Value search,                                  Value replace,                                  Value subject,                                  @Reference @Optional Value count)    throws Throwable  {    count.set(LongValue.ZERO);    if (subject.isNull())      return StringValue.EMPTY;    if (search.isNull())      return subject;    if (subject instanceof ArrayValue) {      ArrayValue subjectArray = (ArrayValue) subject;      ArrayValue resultArray = new ArrayValueImpl();      for (Value value : subjectArray.values()) {        Value result = str_replace_impl(env,                                        search,                                        replace,                                        value.toString(),                                        count);        resultArray.append(result);      }      return resultArray;    }    else {      String subjectString = subject.toString();      if (subjectString.length() == 0)        return StringValue.EMPTY;      return str_replace_impl(env,                              search,                              replace,                              subjectString,                              count);    }  }