http://www.perlmonks.org?node_id=1226437


in reply to curious behavior: why does it do this?

The hashref stuff is not actually even part of the necessary build-up to demonstrate the behavior:

perl -E 'say for "0".."-1"'

This produces 0, 1, 2, and so on up to 99. But the '-' is not part of the necessaries either:

perl -E 'say for "0".."^1"'

Same outcome. And in fact, the '1' isn't needed:

perl -E 'say for "0".. "##"'

Same behavior. And it turns out that the number of digits on the right side is the only thing that dictates how many numeric digits we count up to:

perl -E 'say for "0" .. "abc"'

...produces 0 through 999 as output.

Why does this all work so well? Here's the explanation from perlop:

If the final value specified is not in the sequence that the magical increment would produce, the sequence goes until the next value would be longer than the final value specified.

However, I feel it's stretching the documentation for convenience sake to say that the fact that the strings are never upgraded to numbers (even the one on the left) but are iterated upon within the confines of numeric digits until they fill the number of digits represented on the right, is actually well documented. ;)


Dave