my @Data = (); while my $line () { push @Data, {}; @{$Data[-1]}{ 'ID', 'Title', 'Date' } = split( /\|/, $line ); } @Data = sort { $a->{'Title'} cmp $b->{'Title'} } @Data; foreach my $line ( @Data ) { print join( ' | ', @$line{ 'ID', 'Title', 'Date' } ), "\n"; }