On Wed, 23 Apr 2008 09:34:13 +0100, Tim Bunce <[EMAIL PROTECTED]> wrote:
> Here's a more refined and detailed outline. It's evolved from one I aka more involved ;) > sub _concat_hash_sorted { > my ( $hash_ref, $kv_separator, $pair_separator, $value_format, > $sort_type ) = @_; > # $value_format: false=use neat(), true=dumb quotes > # $sort_type: 0=lexical, 1=numeric, undef=try to guess > > $keys = _get_sorted_hash_keys($hash_ref, $sort_type); > my $string = ''; > for my $key (@$keys) { > $string .= $pair_separator if length $string > 0; > my $value = $hash_ref->{$key}; > if ($value_format) { > $value = (defined $value) ? "'$value'" : 'undef'; > } > else { > $value = neat($value,0); > } > $string .= $key . $kv_separator . $value; > } > return $string; > } > > sub _get_sorted_hash_keys { > my ($hash_ref, $sort_type) = @_; > if (not defined $sort_type) { > my $first_key = (each %$hash_ref)[0]; > $sort_type = looks_like_number($first_key); > } > my @keys = keys %$hash_ref; > @keys = ($sort_type) > ? sort sort_numerically @keys > : sort sort_lexicaly @keys; > return [EMAIL PROTECTED]; > } > > Does that look okay? Looks fine. I did draft of the above (without the neatsvpv for right now as I need to dig into that some more), and I have couple of questions: 1. You no longer want _concat_hash_keys() ? 2. How closely are you expecting the C API to match the perl api? It looks like the C stuff would have to do less work if it were to pass some of the string lengths around. 3. Do we worry about Magic here? > > p.s. Some tests with reasonable coverage would be the icing on the cake! Of course! -r