#!perl use strict; my %data; my ($key, $data); while () { chomp($_); if (/^(\d+):\s*(.+)$/) { $data{$key} = $data if defined $key; $key = $1; $data = $2; } else { $data .= " $_"; } } $data{$key} = $data if defined $key; foreach my $key (sort {$a <=> $b} keys %data) { print "$key: '$data{$key}'\n"; } __DATA__ 3: Tag found 1 Tag found 2 5: Tag found 3 7: Tag found 4 14: Tag found 5 16: Tag found 6 18: Tag found 7 21: Tag found 8 25: Tag found 9 27: Tag found 10 29: Tag found 11 32: Tag found 12 34: Tag found 13 49: Tag found 14 80: Tag found 15 98: Tag found 16 Tag found 17