@Data=; foreach $line(@Data) { if ($line=~s#((?:.+?))#$1#) { $curr=$2; $endtag=''; $line=~s#^()?(.+?$)#$1$2#; if ($prev=~m#^$#) { $line=~s###g; } elsif ($prev == $curr) { $line=~s###; } elsif ($prev > $curr) { $x=$prev-$curr; for ($i=0; $i<$x; $i++) { $line="$endtag\n".$line; } $line=~s###; } $line=~s##
#g; } $prev=$curr; $Final.=$line; } $Final=$Final.'
'; print $Final; __DATA__

Heading Level 1

Heading Level 2

Heading Level 2

Heading Level 2

Heading Level 3

Heading Level 3

Heading Level 2

Heading Level 1 ####
Heading Level 1
Heading Level 2
Heading Level 2
Heading Level 2
Heading Level 3
Heading Level 3
Heading Level 2 Heading Level 1