OK, back to this, so we can finish it up: we have a number of proposals
& questions re: string-to-num conversions, and from Luke we have some
initial docs for them that need completing. Can I get more feedback on
these issues, plz, and any other String -> Number proposals/questions?
(A) Unification of Literal <--> Stringified Numeric Behaviors
An old proposal that I can't find anymore suggested that strings should
be converted to a number according to the exact same rules as literals,
such that:
0123 == "0123"
0xff == "0xff"
20#1gj == "20#1gj"
1e10 == "1e10"
.... in the interest of regularity, flexibility, etc. Comments?
(B) We want to be able to convert strings to numbers, using strings in
any of the formats that literals understand. If (A) is accepted, this
is unnecessary: if not, we need a conversion syntax, maybe something
like one of:
my $s = "20#1gj";
my num $i = literal $s; # (1a) literal is a func or unary op
my num $i = numeric $s; # (1b) alternate spelling?
my num $i = $s.literal; # (2a) str has method 'literal'
my num $i = $s.numeric; # (2b)
(C) We sometimes want to be able to specify the _exact_ format a string
should be expected as. Suppose you wanted a user to always enter a hex
value: they should be able to just enter "10" or "ff", and you wanted
to convert that to 16 and 255, respectively. So you'd maybe use
something like:
my $s = "ff"; # note there's no '0x' in front
my int $i = hex $s;
my int $i = $s.hex;
my int $i = $s.numeric('%2x'); # ???
e.g. is "numeric" a method of str, and if so, can it accept formatting
information? And are there shortcuts for the common cases that
literals already know about, e.g. <<sci dec bin oct hex>>?
(D) There were proposals to allow a given string to _always_ be
numified in a certain way by attaching a property, e.g.:
my str $s is formatted('%2x');
$s = 'ff';
my int $i = $s; # 255
....now I'm wondering if that's buying us anything, though the inverse
seems much more useful:
my int $i is formatted('%4x');
$i = 255;
print $i; # prints '00ff';
Anyone care to comment? Compiletime property, runtime property, or
both?
(E) We need to finalize what happens when a string isn't a number, or
has additional trailing stuff. Damian gave his initial preference, but
we need to verify & set in stone:
my int $i = 'foo'; # 0, NaN, undef, or exception?
my int $i = '5foo'; # 5, NaN, undef, or exception?
my Int $i = 'foo'; # 'Int' probably makes a difference
my Int $i = '5foo';
MikeL
- Re: Help! Strings -> Numbers Michael Lazzaro
- Re: Help! Strings -> Numbers Angel Faus
- Re: Help! Strings -> Numbers Dave Whipp
- Re: Help! Strings -> Numbers Paul Johnson
- Re: Help! Strings -> Numbers Larry Wall
- Re: Help! Strings -> Numbers Michael Lazzaro
- Re: Help! Strings -> Numbers Larry Wall
- Re: Help! Strings -> Numbers Jonathan Scott Duff
- Re: Help! Strings -> Numbers Tanton Gibbs
- Re: Help! Strings -> Numbers Michael Lazzaro
- Re: Help! Strings -> Numbers Tanton Gibbs