Vineet Pande <[EMAIL PROTECTED]> asked:

> I don't understand the way perl 'advances' the variables 
> along the range a-z, A-Z, and 0-9.

This is described in the perlop manpage:

[...]
The auto-increment operator has a little extra builtin magic to it. If you
increment a variable that is numeric, or that has ever been used in a
numeric context, you get a normal increment. If, however, the variable has
been used in only string contexts since it was set, and has a value that is
not the empty string and matches the pattern /^[a-zA-Z]*[0-9]*\z/, the
increment is done as a string, preserving each character within its range,
with carry:

    print ++($foo = '99');      # prints '100'
    print ++($foo = 'a0');      # prints 'a1'
    print ++($foo = 'Az');      # prints 'Ba'
    print ++($foo = 'zz');      # prints 'aaa'
[...]

> For example from a book
> 
> $a = "A9"; print ++$a, "\n";
> 
> gives B0 as expected,
> 
> but,
> $a = "Zz"; print ++$a, "\n";
> 
> gives AAa.
> 
> Why?? why not Aa only!

Think about how this works. Perl first look at the 'z' and turns
it into an 'a'. It also knows that it has a carry-over digit, so
it next looks at the 'Z'. This is turned into an 'A', and there 
is a carry-over again, so that becomes the leading 'A'.

> also $a = "9z"; print ++$a, "\n";
> 
> gives 10.
> and why not 0a?

Because "9z" is a number with trailing garbage, which is silently
discarded during transformation to a number. The incrementing of
letters only works for strings that start with letters - see the
quoted text above.

HTH,
Thomas

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to