use 5.010; use strict; use warnings; $/ = undef; my $data = ; #method 1: build regex on the fly (read tags from files) say '---------- method 1 ----------'; my @tags = qw( TAG1 TAG2 TAG3 TAG4 ); my $tags_re = join "|", @tags; $tags_re = qr{ $tags_re }; say $tags_re; my @stuff = split /($tags_re)=\s*/, $data; say "#$_#" for @stuff; # method 2: static regex say '---------- method 2 ----------'; my @stuff2 = split /(TAG1|TAG2|TAG2|TAG4)=\s*/, $data; say "#$_#" for @stuff2; __DATA__ TAG1= data TAG2= more data TAG3= even more data that sometimes has = and runs on to more than one line TAG4= still more