in reply to Re: Section Handling - Nested
in thread Section Handling - Nested
After I claimed earlier today, that the problem has an elegant solution based on a stack, I have to publish my proposal here, despite the fact that there is no sign that veera has spend any effort on solving this.
use strict; use warnings; my @stack; while(<DATA>) { if( s|^(<(\d+)>.*)(</\2>\n)|$1\n| ) { print pop @stack while @stack and substr( $stack[-1], 2, -2 ) >= $ +2; push @stack, $3; } print; } print reverse @stack; __DATA__ <1>one</1> data data data data <2>two</2> data data data data <3>three</3> data data data data <3>blah</3> data data data data <2>blah</2> data data data data <4>zoom</4> data data data data <4>zoom</4> data data data data <1>data</1> data data data data
|
|---|