One issue I faced while working on
PIG-928 was when trying to name variables in ruby bound to java variables. Ruby variable names (in BSF) needs to be prepended with $ as shown below.
define myudf org.apache.pig.scriptedUDFs.GenericEvalFunc('wordtokens','return $input.split();');
Now this $ appearing in the script should not be substituted. But parser tries to substitute it and fails (with error undefined parameter) since param is not specified while invoking Pig. My hack was to 'escape' this $ and then provide param-substiution while invoking the script as -p input=input
define myudf org.apache.pig.scriptedUDFs.GenericEvalFunc('wordtokens','return $$input.split();');
Note extra $. Obviously, if we are thinking of adding pig-928 and accept udfs written in ruby, this will come up as an issue. One possibility is Pig should not try to do substitution if param is not specified on cmd line. I think way it currently is parser scans the script for $ and then tries to do substiution. If substitution was not defined it error outs. I think if it is not specified on cmd line, then parser should ignore it and continue instead of failing.