#!/usr/bin/perl # http://perlmonks.org/?node_id=1184431 use strict; use warnings; for ( split /^BEGIN_TAG\nX\d+ /m, do { local $/; } ) { s/\n */ /g; # combine lines s/ X\d+/;/g; # change Xn to ; s/\s*\z/\n/; # make sure \n at end of line print; } __DATA__ BEGIN_TAG X1 test test test X2 no no no no X3 yes yes yes BEGIN_TAG X1 test test test tes test test X2 no no no no no nono non no no nononono no no no X3 hi hi hi hi hi hi hi hi hi hi hi hi