> A 
>  Aadvard
>       * Item 1
>       * Item 2
>  Adze
>       * Item 1
>       * Item 2
> B 
>  Boo
>       * Item 1
>       * Item 2 etc.
> 
> What i want to do is something like
> 
> [% FOREACH name_beginning_with = ["A"-"Z"] %]
>    [% name_beginning_with %]
>       [% # get keys that perl @my_names = grep
> ^\${name_beginning_with}, keys %names would return %]
>       [% FOREACH name = my_names %]
>           [% name %]
>              [% FOREACH item = name.keys %]
>                    * [% item.$key %]
>              [% END %]
>       [% END %]
> [% END %]

How about this:

    use Template;
    my $tt = Template->new();
    $tt->process(\*DATA, {
            names => {
                Apple   => {X => "x1", Y => "y1", Z => "z1"},
                Aadvard => {X => "x2", Y => "y2", Z => "z2"},
                Boo     => {X => "x3", Y => "y3", Z => "z3"},
            }
        }) || die $tt->error();

    __DATA__
    [% currLetter = '';
       FOREACH name = names.keys.sort;
         firstLetter = name.split('').0;
         IF currLetter != firstLetter;
            firstLetter; "\n";
            currLetter = firstLetter;
         END;
         "  $name\n";
         FOREACH key = names.$name.keys;
               "    * ${names.$name.$key}\n";
         END;
       END;
    %]

The only difference is that this version will only print a leading
letter if the hash contains an entry starting with that letter
(your version always prints A..Z).

Craig


Reply via email to