The auto-increment operator has a little extra builtin magic to it. ... "undef" is always treated as numeric, and in particular is changed to 0 before incrementing (so that a post-increment of an undef value will return 0 rather than "undef").