that doesn't accept hex or octal constants
You're conflating the issue. Mixing apples and blackberries in an attempt to make sanyos.
Perl does accept hex or octal (and binary to boot) constants anywhere it accepts a decimal constant:
print for 65, 0x41, 0101, 0b1000001;; 65 65 65 65
In addition, it also accepts a string containing a decimal constant, anywhere it takes a number:
print 65 + 0x41 + 0101 + 0x1000001 + "3.141592653589793238462643383279 +5e001";; 16777443.4159265
Making it more flexible than most other languages.
The fact that it does not also accept strings containing non-decimal numeric values is not a language flaw; but a design decision, which if you think about it a little, makes perfect sense.
A string containing just decimal digits, can only be a number.
A string containing "OX84AB97" could be a color code; and one containing "007 James Bond" ...