From the first two sentences for the range operator, documented in perlop:
Binary ".." is the range operator, which is really two different operators depending on the context. In list context, it returns a list of values counting (up by ones) from the left value to the right value. If the left value is greater than the right value then it returns the empty list.
When the code doesn't work, decompose it to see what's happening. For instance, you would try the range operator to see what it produced:
my @indices = 1 .. -5;
print "Indices are [@indices]\n";
When you got an empty list list and realized that there is something going on that you don't understand, check the docs for whatever you are trying to do to check it's doing what you think it should be doing. :)