On Mon, May 06, 2013 at 12:13:28PM +0200, demerphq wrote: > On 6 May 2013 12:02, Dave Mitchell <davem@iabyn.com> wrote: > > On Sun, May 05, 2013 at 11:45:25PM +0200, Sébastien Aperghis-Tramoni wrote: > >> So, here is a proposal to try making this situation a bit better: > >> annotate the SV to record the initial (or canonical) type of the the > >> value, that is the type of the value that was last affected to the SV. > > > > But I don't think that necessarily solves the problem. Consider: > > > > while (<DATA>) { > > chomp; > > my ($x,$y) = split / /, $_; > > my $z = sqrt($x*$x + $y*$y); > > ... serialise $x, $y, $z; > > } > > __DATA__ > > 0.123 1.234 > > ... > > > > should $x, $y be serialised as strings or floats? I think the desire of > > the programmer would be for them to be floats, but the canonical form is > > string. In other words, the initial type still doesn't necessarily DWIM, > > and its still up to the programmer to manually ensure the output is as > > desired. > > Personally i think most serialization module authors would consider > the canonical form to be the string, not the NV. > > Consider what should happen if the data line was > > __DATA__ > 0.123x 0.1234x Yes, but my point is that serialization modules will often not do what the user really intended, and using the canonical type doesn't fix that: it just shuffles around the cases when it does and doesn't DWIM. I think if it's important that something gets serialised in a particular format, then in some way the programmer needs to tell the serialiser what that format should be. -- The optimist believes that he lives in the best of all possible worlds. As does the pessimist.Thread Previous | Thread Next