sleep.interfaces
Interface Evaluation

All Known Implementing Classes:
BasicIO

public interface Evaluation

A Sleep evaluation is a way to define how a `back quoted` string should work. In Perl any text inside of `back quotes` is fevaluated for embedded $scalar values and then executed as a shell command. The output of the executed command is collected into a perl array and returned as the resulting value of the `back quote` expression.

While executing commands in this way might be a useful abstraction, it seems more fun to allow you, the application developer to define what this syntax should do.

The following is an implementation of perl-like backquote behavior for Sleep:

 import sleep.interfaces.Evaluation;

 import sleep.runtime.Scalar;
 import sleep.runtime.ScriptInstance;
 import sleep.runtime.SleepUtils;

 import java.io.*;

 public class PerlLike implements Evaluation
 {
    public Scalar evaluateString(ScriptInstance script, String value)
    {
       Scalar rv = SleepUtils.getArrayScalar();

       try
       {
          // execute our process and setup a reader for it 
 
          Process proc  = Runtime.getRuntime().exec(value);
          BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));

          // read each line from the process output, stuff it into our scalar array rv

          String text = null;
          while ((text = reader.readLine()) != null)
          {
             rv.getArray().push(SleepUtils.getScalar(text));
          }
       }
       catch (IOException ex)
       {
          script.getScriptEnvironment().flagError(ex.toString());
       }

       return rv;
    }
 }

To install the perl-like backquote evaluator into the script environment:

 public boolean scriptLoaded(ScriptInstance script)
 {
    Evaluation perlStuff = new PerlLike();
 
    Hashtable environment = script.getScriptEnvironment().getEnvironment();
    environment.put("%BACKQUOTE%", perlStuff);

    return true;
 }
 


Method Summary
 Scalar evaluateString(ScriptInstance si, java.lang.String value)
          Evaluate the specified string value.
 

Method Detail

evaluateString

Scalar evaluateString(ScriptInstance si,
                      java.lang.String value)
Evaluate the specified string value.

Parameters:
typeKeyword - the keyword for the function. (i.e. sub)
functionName - the function name (i.e. add)
functionBody - the compiled body of the function (i.e. code to add 2 numbers)