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