http://qs321.pair.com?node_id=1172752

in reply to Re^6: why are hex values not numbers?
in thread why are hex values not numbers?

You could just as easily say a string containing just octal, or binary or hexadecimal digits, can only be a number.

Except that you would be completely wrong.

• ABBA
• Da
• face
• Abe
• EFF

... and many, many more are clearly not only numbers.

Replies are listed 'Best First'.
Re^8: why are hex values not numbers?
by perl-diddler (Chaplain) on Sep 27, 2016 at 16:48 UTC
I did specify that it would have to start with 0x to be a hex constant, and 0 to be an octal, so are you saying that 0xABBA, 0xDA, 0xface, 0xAbe, 0xEFF would all, clearly, not be hex values?

I'm sorry, but at lets at least try to stay on the same page, and forgive me if I wrote this non-linearly, but such is the PM-medium.

clearly, not be

I didn't say "clearly, not be", I said: "might not be".

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I knew I was on the right track :)
In the absence of evidence, opinion is indistinguishable from prejudice.
I was quoting hippo, who said
... and many, many more are clearly not only numbers.
who replied to my saying constants that were hex or octal and started with a number (or 0x for hex) also fell into the category of being "only being a number", since 0x, *especially*, seems to have been created ONLY for hex (vs. a leading zero seems like a convention for octal).

I'm simply saying that if I have a string containing "0x41" and use it in addition, why shouldn't perl auto-numify it just like it does "65" in a string? Admittedly, treating "065" like octal now, could cause some incompatibility, but I would assert it already is confusing to people who know that octal constants start with a "0".

But lets ignore the explicit quoting of such -- simple read user input or read input from a file -- did the user type a number or input a string that could be a number? Say you have a loop:

```while (<>) {
chomp;
printf "input as string=%s, as decimal=%d\n", \$_, \$_;
}'
# now user does input:
65
input as string=65, as decimal=65
0x41
Argument "0x41" isn't numeric in printf at -e line 5, <> line 2.
input as string=0x41, as decimal=0
"65"
Argument ""65"" isn't numeric in printf at -e line 5, <> line 3.
input as string="65", as decimal=0
So if the user inputs a quoted number, it doesn't numify (not saying it should), but if they input a naked number in decimal or hex, the decimal works, but the hex does not.

If I do the same in shell, the unquoted case is how I think perl *could* work, the string case is a bit surprising but useful. That's shell for you, don't throw an error when you could do something useful (unless the error is required by posix... ug).

```> while read a; do
> printf "string=%s, as decimal=%d\n" \$a \$a
> done
65
string=65, as decimal=65
0x41
string=0x41, as decimal=65
"0"
string="0", as decimal=48
"0x30"
string="0x30", as decimal=48