I was under the impression that local variables wouldn't work with filter()... but I've just tried this on one of my vim instances (vim-7.2) and it does work. I'll double check later with vim-7.0, and hopefully remove that global variable (which I didn't like anyway).

function Test1()
 let l:l=[1,2,3]
 let l:v=2
 echo filter(l:l,'v:val != l:v')
endfunction

:call Test1()
[1, 3]