my $str = join '', ; %bits = $str =~ m/^(U[\d\.]+)\n\n(.*?)\n\n/msg; use Data::Dumper; print Dumper \%bits; __DATA__ [snip]