@Override
  public Object isDefined(VirtualFrame frame) {
    CompilerDirectives.transferToInterpreter();
    final DynamicObject threadLocalVariablesObject =
        threadLocalVariablesObjectNode.executeDynamicObject(frame);

    if (readNode.getName().equals("$~")
        || readNode.getName().equals("$!")
        || readNode.execute(threadLocalVariablesObject) != nil()) {
      return create7BitString(
          StringOperations.encodeByteList("global-variable", UTF8Encoding.INSTANCE));
    } else {
      return nil();
    }
  }
 @Override
 public Object execute(VirtualFrame frame) {
   final DynamicObject threadLocalVariablesObject =
       threadLocalVariablesObjectNode.executeDynamicObject(frame);
   return readNode.execute(threadLocalVariablesObject);
 }