http://www.perlmonks.org?node_id=1052513


in reply to Multiline regex for moving lines?

Rather than using a complicated regex you could read your records into an array then print in the desired order using an array slice.

use strict; use warnings; open my $inFH, q{<}, \ <<EOF or die $!; #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=80000 80.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000 400.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 700.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000 1500.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2500000 2500.m3u8 EOF my @records; push @records, scalar <$inFH>; push @records, join q{}, map scalar <$inFH>, 1 .. 2 while not eof $inFH; print for @records[ 0, 3, 1, 2, 4, 5 ];

The output.

#EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=700000 700.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=80000 80.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=400000 400.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000 1500.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2500000 2500.m3u8

I hope this is helpful.

Cheers,

JohnGG