I know this thread is a little old, but after writing literally hundreds of $sheet->Cells($this,$that)->{Value} lines of code, I hit this exact problem.
The solution of writing 0+$this works!
What makes Perl think these particular variable are strings, when it has treated them as numbers in so much similar code?