#!/usr/perl -w use strict; use XML::Twig; my $t= XML::Twig->new( twig_roots => { heading => \&heading }, twig_print_outside_roots => 1, pretty_print => 'indented' ); $t->parse( \*DATA); sub heading { my( $t, $heading)= @_; if( defined $heading->att( 'level')) { $heading->set_gi( 'heading' . $heading->att( 'level')); $heading->del_att( 'level'); } elsif( my $pcdata= $heading->first_child( '#PCDATA')) { my $text= $pcdata->pcdata; if( $text=~ s/^\s*level\s*=\s*(\d+),//s) { $pcdata->set_pcdata( $text); $heading->set_gi( 'heading' . $1); } } $heading->print; } __DATA__ level=3, Specifying Rest Arguments in a Procedure Definition Introduction to Arguments