in reply to Perl 5.10.1 versus 5.8.8 with $#{}

The contents of $#{ ... } must be an expression that returns a reference or a variable name (aka symbolic reference).

$#{ @array } was buggy in the past — it was treated as $#{ \@array } — but it was fixed to work as documented. You were apparently relying on this bug. The correct usage is

$#{ $ref }

or simply.

$#$ref

Note the parallels:

$array[$i] ${ $ref }[$i] (also $ref->[$i]) @array @{ $ref } $#array $#{ $ref }

Ref:
Dereferencing Syntax
References Quick Reference

But when I ran the code that does this in perl 5.10.1, it returns -1 for $#{@{$a}}.

You should have gotten

Can't use string ("0") as an ARRAY ref while "strict refs" in use.

Don't hide errors. Use «use strict; use warnings;»!