my $sql = { SELECT => [ 'column1', 'column2', 'column3' ], FROM => [ 'table1', 'table2' ], WHERE => [ 'condition1', 'condition2' ], GROUP_BY => [ 'column1', 'column2' ], HAVING => [ 'condition3]' ], ORDER_BY => [ 'column1','column2' ], # ... you get the idea }; # Store the separators in another hash: my $sep = { SELECT => ',', FROM => ',', WHERE => ' AND ', HAVING => ' AND ', GROUP_BY => ',', ORDER_BY => ',' }; #### my $query = join ' ', map { join $sep->{$_}, @{$sql->{$_}} } qw(SELECT FROM WHERE GROUP_BY HAVING);