In perl5, it's not always possible to distinguish between a number and a string.
The following table shows some examples, the internal flags of the variable,
and how several JSON and YAML modules treat them.
INT | NUMBER | STRING | JSON::PP | JSON::XS | Cpanel::JSON::XS | JSON::Tiny | Mojo::JSON | YAML | YAML::XS | YAML::Syck | YAML::PP | YAML::Tiny | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2.97001 | 3.04 | 4.02 | 0.58 | 7.75 | 1.26 | 0.72 | 1.30 | 0.007 | 1.73 | |||||
1 | $x = 10 | x | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | ||
2 | $x = 11; $x .= ""; $x | x | "11" | "11" | "11" | "11" | "11" | 11 | '11' | 11 | '11' | '11' | ||
3 | $x = 12; $x .= "x"; $x += 0; $x | x | 12 | 12 | 12.0 | 12 | 12 | 12 | 12 | '12' | 12.0 | 12 | ||
4 | $x = 13; $y = $x . "string"; $x | x | x | 13 | "13" | 13 | 13 | 13 | 13 | 13 | 13 | 13 | '13' | |
5 | $x = 14; $x .= ""; $x += 0; $x | x | 14 | 14 | 14 | 14 | 14 | 14 | 14 | 14 | 14 | 14 | ||
6 | $x = 15; $x .= ""; $y = $x + 1; $x | x | x | 15 | "15" | 15 | 15 | 15 | 15 | 15 | 15 | 15 | '15' | |
7 | $x = "16" | x | "16" | "16" | "16" | "16" | "16" | 16 | '16' | 16 | '16' | '16' | ||
8 | $x = "17"; $x += 0; $x | x | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | 17 | ||
9 | $x = "18"; $y = $x + 0; $x | x | x | 18 | "18" | 18 | 18 | 18 | 18 | 18 | 18 | 18 | '18' | |
10 | $x = 19; $x .= "x"; $y = $x + 0; $x | x | x | x | "19x" | "19x" | "19x" | "19x" | "19x" | 19x | 19x | 19x | 19x | 19x |
11 | $x = 2e1 | x | 20 | 20 | 20.0 | 20 | 20 | 20 | 20 | '20' | 20.0 | 20 | ||
12 | $x = "021"; $y = $x + 0; $x | x | x | "021" | "021" | "021" | "021" | "021" | 021 | 021 | '021' | '021' | '021' | |
13 | $x = 22.1; $x | x | 22.1 | 22.1 | 22.1 | 22.1 | 22.1 | 22.1 | 22.1 | '22.1' | 22.1 | 22.1 | ||
14 | $x = 23.1; $y = $x . ''; $x | x | 23.1 | 23.1 | 23.1 | 23.1 | 23.1 | 23.1 | 23.1 | '23.1' | 23.1 | 23.1 | ||
15 | $x = 24.1; $x .= ''; $x | x | "24.1" | "24.1" | "24.1" | "24.1" | "24.1" | 24.1 | '24.1' | '24.1' | '24.1' | '24.1' | ||
16 | $x = "25.0"; $y = $x + 0; $x | x | x | x | "25.0" | "25.0" | "25.0" | "25.0" | "25.0" | 25.0 | 25.0 | '25.0' | '25.0' | '25.0' |
17 | $x = 0 + "inf" | x | Inf | inf | null | "Inf" | "Inf" | Inf | Inf | 'Inf' | .inf | Inf | ||
18 | $x = 0 - "inf" | x | -Inf | -inf | null | "-Inf" | "-Inf" | -Inf | -Inf | '-Inf' | -.inf | -Inf | ||
19 | $x = 0 + "nan" | x | NaN | -nan | null | "NaN" | "NaN" | NaN | NaN | 'NaN' | .nan | NaN |