while(my $row = $sth->fetchrow_hashref ){ push @users, { name => $row->{user} , pc => $row->{pcname} }; } print header,start_html,start_table; print map { Tr(td($_->[0]->{name}),td($_->[0]->{pc})) } sort { $a->[1] cmp $b->[1] } map { [$_, lc(get_lname($_)) ] } @users; print end_table, end_html; $sth->finish; $dbh->disconnect; sub get_lname{ my $nameref = shift; my $name = $nameref->{name}; if ($name !~ /[a-z]/ || $name !~ /[A-Z]/) { return ($name =~ /^\w(\w+)/)[0]; }elsif($name =~ /[A-Z][a-z]/){ return ($name =~ /([A-Z][a-z]+)/)[0]; }else{ return "z"; } }