use warnings; use strict; my %data; my $key; while () { chomp; if (/#(\d+)/) { $key = $1; } else { push @{ $data{$key} }, $_; } } for my $key (sort {$a <=> $b} keys %data) { print "#$key\n"; print "$_\n" for @{ $data{$key} }; } __DATA__ #12346 orange #12345 apple banana #12344 pear