in reply to Creating dynamic hash names

Something along the lines of ...
use warnings; use strict; use Data::Dumper; use Text::xSV; my $sv = Text::xSV->new(sep => '|', fh => *DATA); my $res = {}; while (my $row = $sv->get_row()) { $res->{shift @$row} = [ @$row ]; } print Dumper $res; __DATA__ UserID001|username1|password1|displayname1| UserID002|username2|password2|displayname2| UserID003|username3|password3|displayname3|
when run, gives
$ perl tst.pl $VAR1 = { 'UserID001' => [ 'UserID001', 'username1', 'password1', 'displayname1', undef ], 'UserID002' => [ 'UserID002', 'username2', 'password2', 'displayname2', undef ], 'UserID003' => [ 'UserID003', 'username3', 'password3', 'displayname3', undef ] };
Is that the sort of thing you're after (with a bit of fettling to suit your individual needs) ??

A user level that continues to overstate my experience :-))