Структура данных, которую вы выбираете, действительно зависит от того, что вы хотите сделать с данными. Если вас больше всего интересует получение данных для данного пользователя, вы можете просто использовать прямой хеш, где ключи - это имена пользователей, а значение для данного ключа - это ссылка на массив значений из / etc / passwd:
open PASSWD, '/etc/passwd';
my %users;
while (<PASSWD>) {
chomp;
next if /^\s*#/; # ignore comments
my ($username, @details) = split /:/;
$users{$username} = \@details;
}
# get values for user 'root'
my $values = $users{'root'};
# print root's home
print $values->[4];
Если вы хотите иметь возможность перебирать всех пользователей и извлекать подробности в удобочитаемом виде, вы можете выбрать массив хешей, каждый из которых представляет пользователя и имеет ключи для имени пользователя, пароля, uid и т. Д.
open PASSWD, '/etc/passwd';
my @users;
while (<PASSWD>) {
chomp;
next if /^\s*#/; # ignore comments
my @f = split /:/;
my %hash;
@hash{'username','password','uid','gid','gecos','home','shell'} = @f;
push @users, \%hash;
}
for my $user (@users) {
print "User $user->{username} has home $user->{home}\n";
}
Надеюсь, это даст вам некоторые идеи!