#! perl -slw use strict; use Data::Dump qw[ pp ]; $Data::Dump::WIDTH = 50; my $reTags = join '|', map quotemeta, qw[ HOSTNAME CONTACT TAG1 TAG2 TAG3 TAG4 ]; $reTags = qr[$reTags]; my %hash = do{ local $/; } =~ m[($reTags)=\s+(.+?)(?=$reTags|\Z)]gsm; pp \%hash; __DATA__ TAG1= data TAG2= more data HOSTNAME= fred TAG3= even more data that sometimes has = and runs on to more than one line CONTACT= Wiley Coyote Hiesenberg Road The Desert TAG4= still more #### c:\test>junk15 { CONTACT => "Wiley Coyote\nHiesenberg Road\nThe Desert\n", HOSTNAME => "fred\n", TAG1 => "data\n", TAG2 => "more data\n", TAG3 => "even more data that sometimes has = and\nruns on to more\nthan one line\n", TAG4 => "still more", }