use strict; use warnings; use Data::Dumper; use List::MoreUtils qw( mesh ); my @users = map { { mesh @{[ qw( login uid gid name home shell ) ]}, @{[ /^([\-\w]+):x:(\d+):(\d+):([\-\w\s\(\)\,]*):([\w\/]+):([\w\/]+)$/ ]} } } ; print Dumper \@users; __DATA__ hdb:x:1111:2222:hdb:/home/hdb:/bin/bash