Numeric Literals
Numeric literals are specified in any of several customary[47] floating-point or integer formats:
my $x = 12345; # integer my $x = 12345.67; # floating point my $x = 6.02e23; # scientific notation my $x = 4_294_967_296; # underline for legibility my $x = 0377; # octal my $x = 0xffff; # hexadecimal my $x = 0b1100_0000; # binary
Because Perl uses the comma as a list separator, you cannot
use it to separate the thousands in a large number. Perl does allow
you to use an underscore character instead. The underscore only
works within literal numbers specified in your program, not for
strings functioning as numbers or data read from somewhere else.
Similarly, the leading 0x for
hexadecimal, 0b for binary, and 0 for
octal work only for literals. The automatic conversion of a string
to a number does not recognize these prefixes—you must do an
explicit conversion[48] with the oct
function—which works for hex and binary numbers, too, as it
happens, provided you supply the 0x or 0b on the front.
[47] Customary in Unix culture, that is. If you’re from a different culture, welcome to ours!
[48] Sometimes people think Perl should convert all incoming
data for them. But there are far too many decimal numbers with
leading zeros in the world to make Perl do this automatically.
For example, the zip code for the O’Reilly Media office in
Cambridge, Massachusetts, is 02140. The postmaster would get
confused if your mailing label program turned 02140 into 1120 decimal.
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access