#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my @users; while ( my $line = <> ) { chomp $line; my @fields = qw( login uid gid name home shell ); $line =~ /^ ([\-\w]+):x:(\d+):(\d+):([\-\w\s\(\)\,]*):([\w\/]+):([\w\/]+)$/x or die "Malformed input [$line]"; my %users; @users{@fields} = ($1, $2, $3, $4, $5, $6); push @users, \%users; } print Dumper \@users;