> 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