#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $info; $info .= $_ while(); my %lines; while($info =~ m/(?:^|\n)(\d+)\:(.+?)(?=(?:\n\d)|$)/gs) { $lines{$1} = $2; } print Dumper (\%lines); __DATA__ 3: Tag found Tag found 5: Tag found 7: Tag found 14: Tag found 16: Tag found 18: Tag found 21: Tag found 25: Tag found 27: Tag found 29: Tag found 32: Tag found 34: Tag found 49: Tag found 80: Tag found 98: Tag found Tag found #### c:\test>208384 $VAR1 = { '29' => ' Tag found', '21' => ' Tag found', '7' => ' Tag found', '14' => ' Tag found', '80' => ' Tag found', '32' => ' Tag found', '16' => ' Tag found', '49' => ' Tag found', '25' => ' Tag found', '3' => ' Tag found Tag found', '98' => ' Tag found Tag found', '34' => ' Tag found', '18' => ' Tag found', '27' => ' Tag found', '5' => ' Tag found' }; c:\test>