I think you need to say @echo off, but within backticks, perl is interpolating values and is trying to find an array called @echo (bet you're not running under strict, are you?). You could try making a system call and use single quotes or escape the @, but I'm still not sure something like that works. Isn't setting @echo changing the shell, and doesn't a new shell get spawned for every sytem call? Dunno, try and see.
----------------------------------------------------------------------------------
...but I'm just a C man trying to see the light