The topic of evaluate() recently came up on the CFCDev list. Sean Corfield asserts that evaluate() is only needed for backward compatibility since all variables scopes can be treated as structures as of ColdFusion MX. He argues against its use in any new code siting performance reasons.
Here are some situations in which you might be using evaluate(), but don't need to do so.
1) Getting the value of a Form variable where the field name is (or contains) a variable.
Using evaluate:
<cfset foo = evaluate("Form.bar#i#")>
Without evaluate:
<cfset foo = Form["bar#i#"]>
Since Form is now a structure, you can use structure syntax to get the variable. This will work in other scopes as well (request or URL, for example).
2) Get the value of a column in a query where the column name is (or contains) a variable.
Using evaluate:
<cfset foo = evaluate("qBar.text#lang#")>
Without evaluate:
<cfset foo = qBar["text#lang#"][CurrentRow]>
The important thing to keep in mind with queries, is that while you can use structure syntax, you must indicate the row. The "CurrentRow" variable is handy if you are within a query loop (using the query attribute for the given query in either <cfloop> or <cfoutput>). Otherwise, you will have to pass in the number another way. If you know you want the first row, for example, you could simply pass in 1.
3) Checking the existence of a variable.
This isn't actually an evaluate() issue, but I know that Mr. Corfield also recommends avoiding isDefined() in favor of StructKeyExists(), so I thought I may as well cover that here as well.
Using isDefined()
<cfif isDefined("Form.bar#i#")>
Using StructKeyExists()
<cfif StructKeyExists(Form,"bar#i#")>
The same principle applies here as from the first example. Since "Form" is a structure, it can be treated as such (as can other variable scopes).
If you have any other situations in which you currently use evaluate(), let me know.
Good luck!
UPDATE
Scott Stroz noted that you can use the same approach with queries as well. Since the format doesn't show up correctly from comments, here it is:
The format for that would actually be:
<cfset foo = qBar["column name"][CurrentRow]>
or, with a variable,
<cfset foo = qBar[colvar][CurrentRow]>
Scott's example for queries and columns:
<cfset foo = qBar["A column with spaces"][currentRow] />
<cfset foo["a structKey with spaces"] = 'bar' />
Thanks Scott!