Yep, a bug was found :-) At least in the version of perl.vim I had :-)
The syntax was taking care of things such as $1 .. $9, which are special variables, but was not doing anything about variables such as $10 (or, actually, was treating them as $1 and another character).
If you don't believe me, go check it out :-)
This was the patch I proposed (I'm now waiting for some feedback):
136c136,137
< syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@$<>(0-9-]"
---
> syn match perlVarPlain "$[0-9]\+"
> syn match perlVarPlain "$[\\\"\[\]'&`+*.,;=%~!?@$<>(-]"
To tell the truth, I don't even know if it has already been taken care of, but the "most recent version" of the file seems to be unavailable :-\
Anyway, I mailed the maintainer of the file, so it should be corrected soon (provided it still has to)... :-|