perl -MData::Dumper -lanF'\|' -e '$p{$F[0]}=[@F[1..$#F]]}END{print Dumper \%p' abcd #### #!/usr/bin/perl my %p; sub func { my($x,@x)=$_[0]=~/([^\|\n]+)/g;$p{$x}=\@x # Or ... chomp(my($x,@x)=split'\|',pop);$p{$x}=\@x } open SRC, 'abcd'; while () { func($_); } use Data::Dumper; print Dumper \%p;