#!perl use DBI; use strict; use warnings; use Data::Dump 'pp'; my $dbh = get_dbh(); # connect # use hash to group data my %logins=(); my $sql = 'SHOW GRANTS'; my $sth = $dbh->prepare($sql); $sth->execute(); while (my ($result) = $sth->fetchrow_array()) { $result =~ s/['`]//g; if ($result =~ m/GRANT (.+?) ON (.+?) TO (\S+\@\S+)/i){ push @{$logins{$3}{$2}},$1; }; } pp \%logins; # build array from hash my @logins=(); for my $userhost (sort keys %logins){ for my $db (sort keys %{$logins{$userhost}}){ # join into one line here my $grant = join ',',@{$logins{$userhost}{$db}}; my ($user,$host) = split '@',$userhost; push @logins,[$host,$user,$db,$grant]; } } pp \@logins;