#!/usr/bin/perl -w use strict; use XML::Twig; XML::Twig->new( # process just list elements twig_roots => { list => \&process_list }, # output the rest as is twig_print_outside_roots => 1, ) ->parse( \*DATA); sub process_list { my( $t, $list)= @_; # wrap (non-empty) lines in a listitem element my @listitems= $list->split( qr/(^.+)\n/m => 'listitem'); # add the p and extract tags within each listitem foreach my $listitem (@listitems) { $listitem->insert( 'p', 'extract'); } $list->print ; } __DATA__

first item second item third item