in reply to How do I create a new array in memory?

You need to declare the variable lexically with my:
while (<>) { my @record = split /,/; my $key = shift @record; $list{$key} = \@record; }
You can test this by printing out the array references; they should all have different addresses:
print join "\n", values(%list), '';