in reply to Want to fetch inner most child element first

#!/usr/bin/perl # http://perlmonks.org/?node_id=1142802 # want inner child first use strict; use warnings; $_ = join '', <DATA>; my @elements; s/<mml:msub>\K(\w+)(?=<\/mml:msub>)/<A>$1<\/A>/g; push @elements, $1 while s/(<mml:msub>(?:(?!<mml:msub>).)*?<\/mml:msub>)/ '<' . @elements . ' +>'/se; for my $n (1..@elements) { local $_ = $elements[$n - 1]; 1 while s/<(\d+)>/$elements[$1]/; print "$n: $_\n\n"; } __DATA__ <mml:math> <mml:mi>Goa</mml:mi> <mml:mo>abu</mml:mo> <mml:msub> <mml:mrow> <mml:mi>China</mml:mi> </mml:mrow> <mml:mrow> <mml:msub> <mml:mrow> <mml:mi>poland</mml:mi> </mml:mrow> <mml:mrow> <mml:msub>swift</mml:msub> <mml:mi>a</mml:mi> </mml:mrow> </mml:msub> </mml:mrow> </mml:msub> <mml:mo>miot</mml:mo> <mml:msub> <mml:mrow> <mml:mi>Canada</mml:mi> </mml:mrow> <mml:mrow> <mml:msup> <mml:mrow> <mml:mi>police</mml:mi> </mml:mrow> <mml:mrow> <mml:mi>bangalore</mml:mi> </mml:mrow> </mml:msup> </mml:mrow> </mml:msub> </mml:math>

hehehe