#!/usr/bin/perl use strict; use warnings; use Tk; use Tk::HList; my @data; while () { next if m~^\s*$~; my ($bu, $gn, $fu) = split /,/; s~^\s+|\s+$~~g for ($bu, $gn, $fu); push @data, {business_unit => $bu, group_name => $gn, functions => $fu, }; } @data = sort { $a->{business_unit} cmp $b->{business_unit}} @data; my $top = new MainWindow; my $hlist = $top->Scrolled("HList", -header => 1, -columns => 4, -scrollbars => 'osoe', -width => 70, -selectbackground => 'SeaGreen3', ) ->pack(-expand => 1, -fill => 'both', ); { my $count = 0; for my $key (qw/business_unit group_name functions/) { $hlist->header('create', $count++, -text => $data[0]->{$key}); } } { my $count = 0; my $old = ''; for my $d (@data[1..$#data]) { $hlist->add($count); if ($old ne $d->{business_unit}) { my $count2 = 0; for my $key (qw/business_unit group_name functions/) { $hlist->itemCreate($count, $count2++, -text => $d->{$key}); } } else { my $count2 = 1; for my $key (qw/group_name functions/) { $hlist->itemCreate($count, $count2++, -text => $d->{$key}); } } ++$count; $old = $d->{business_unit}; } } MainLoop(); __DATA__ Dept, Group, Function IT, Projects, SAN/NAS, IT, Development, GUI, IT, Security, HR, Admin, West HR, Management, West Legal, Admin, FirmWide, Legal, Compliance,