>CLEAR >ON ERROR ?? MESSAGE() > >? "Expected : 6 Observed VFP8 : 6 VFP9 : Error" >? EVALUATE("printLenString([3+5"+CHR(13)+"+2])") > >? "Expected : 6 Observed VFP8 and VFP9 : Error" >? EVALUATE("printLenString([3+5"+CHR(10)+"+2])") > >? "Expexted : Error Observed VFP8 and VFP9 : Cut the code" >? EVALUATE("printLenString([A])"+CHR(13)+"+printLenString([A])") > >? "Expexted : Error Observed VFP8 and VFP9 : Cut the code" >? EVALUATE("printLenString([A])"+CHR(10)+"+printLenString([A])") > >? "Expexted : Error Observed VFP8 and VFP9 : Cut the code" >? EVALUATE("printLenString([A])"+CHR(0)+"+printLenString([A])") > >ON ERROR > >PROCEDURE printLenString(s) >RETURN LEN(s) >Frank's got it right here, I think: if you look at it as the actual string you're trying to execute, it makes sense.
printLenString([3+5
+2])
should fail.printLenString([A]) printLenString([A])should not. Since EVALUATE() is only supposed to evaluate a single expression, and, as Aleksey says, the end of the line is treated as the end of the string literal, VFP9 is showing the correct behavior.