Somebody smarter than me will answer in a moment (or has answered while I typed this), but I believe your problem is because the split is assigning to an array ref rather than a real array. More correct (but probably not MOST correct) would be:
/(\S+)\s?=?\s?\[(.+)\]$/ && do {
@{$hash{$1}} = split /,/, $2;
next;
};
(Untested!)
Hot Pastrami