It seems to miss cases like:
$foo ->[2]; # Space before or after ->
print $_->{bar}; # Only two non-space chars before ->
$sum += $_->[0] for @array; # Only three non-space chars after ->
And since you aren't using warnings, you don't get a warning if you try to print an undefined $1.
OTOH, it would find a deref in:
perl -ne '/(\S{3,80}->\S{5,80})/;print $1,"\n"'
Don't tell me you never write code like that!
But I'm baffled by the fact you're searching for '->' when you need to figure out which hashes are in some code.