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 #### ---------- method 1 ---------- (?-xism: TAG1|TAG2|TAG3|TAG4 ) #TAG1= data # #TAG2# #more data # #TAG3# #even more data that sometimes has = and runs on to more than one line TAG4= still more # ---------- method 2 ---------- ## #TAG1# #data # #TAG2# #more data TAG3= even more data that sometimes has = and runs on to more than one line # #TAG4# #still more #