#! 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