while () { $prod{$1} = [$2,$3,$4] if m{(.+?)\|(.+?)\|(.+?)\|(.+)}; } #### while () { @{ $prod{$1} } = split('\|', $2) if m/^(.+?)\|(.+)/; } #### while () { my @row = split(/\|/, $_); $prod{$row[0]} = \@row[1..$#row]; #using a slice; }