Kevin Pfeiffer wrote:
> In article <[EMAIL PROTECTED]>, Rob Dixon
> wrote:
>
> > Well done Kevin!
> >
> > Just a couple of points.
>
> Am I surprised? ;-)
>
> > > sub pad_keys {
> > >    my $ref = shift;
> > >    if (ref $ref eq "HASH") {
> > >       for my $value (%$ref) {
> >
> > This will loop over all the keys and values in the
> > hash, in the order key1, value1, key2, value2, ...
> > All you want is the values.
>
> You mean that the last line should be:
>           for my $value (values %$ref) { # ?

Yes. It works as it is only because none of the hash keys
are hash references so they're skipped.

> > Finally, there's no need process the values and then the keys
> > in separate loops. Each execution of either loop corresponds to
> > a key/value pair so you can write
> >
> >   foreach (keys) {
> >     modify key;
> >     recurse on value;
> >   }
>
> After looking at your example I see what you mean.

Great.

> >       next unless (my $new = $_) =~ tr/ /_/;
>
> This tests true only if tr makes a translation?

Yes. tr/// returns the number of substitutions it made in the object
string. So if there were no spaces it will return zero, which is false.

> >
> >       if (exists $ref->{$new}) {
> >         warn "Padded key $new already exists";
> >       }
> >       else {
> >         $ref->{$new} = delete $ref->{$_};
> >       }
> >     }
> >   }
>
> Nice! Thanks for the tips.

Welcome.

Rob




-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to