#!/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;