c:\test>231115 Init: Start: config logdir /var/log/foo/ debugfile /tmp/foo.debug Char: Char: Start: server name sahara osname solaris osversion 2.6 Char: Char: Start: address Char: 10.0.0.101 End: address Char: Char: Start: address Char: 10.0.1.101 End: address Char: Char: End: server Char: Char: Start: server name gobi osname irix osversion 6.5 Char: Char: Start: address Char: 10.0.0.102 End: address Char: Char: End: server Char: Char: Start: server name kalahari osname linux osversion 2.0.34 Char: Char: Start: address Char: 10.0.0.103 End: address Char: Char: Start: address Char: 10.0.1.103 End: address Char: Char: End: server Char: End: config Final: c:\test> #### #! perl -sw use strict; use XML::Simple; use Data::Dumper; my @handlers = qw[ Init Start Char Proc Comment CdataStart CdataEnd End Final ]; for my $handler ( @handlers ) { eval "sub $handler\t{ print qq[\$handler: \@_[1 .. \$#_]\\n]; goto \&XML::Parser::Tree::$handler; }"; } my %handlers = map{ $_ => eval "\\&$_" } @handlers; my $xml = XML::Simple->new(); my $config = $xml->XMLin( \*DATA, parseropts => [ Handlers => \%handlers, ] ); #print Dumper $config; __DATA__
10.0.0.101
10.0.1.101
10.0.0.102
10.0.0.103
10.0.1.103