in reply to
Perl XML Search
use 5.012;
use strict;
use warnings;
use Ask qw(:all);
use XML::LibXML 2;
my $xml = XML::LibXML->load_xml(IO => \*DATA);
my $who = entry("Who are you looking for?");
my ($person) = $xml->findnodes(qq{//person[name/text() = "$who"]})
or error("Cannot find '$who'\n") and die;
my @lines = $person->findnodes(qq{adr/*})->map(sub { $_->textContent }
+);
info(join "; ", @lines);
__DATA__
<contacts>
<person>
<name>Barack Obama</name>
<adr>
<street-address>1600 Pennsylvania Avenue Northwest</street
+-address>
<locality>Washington</locality>
<region>DC</region>
<postal-code>20500</postal-code>
<country>United States</country>
</adr>
</person>
<person>
<name>David Cameron</name>
<adr>
<street-address>10 Downing Street</street-address>
<locality>London</locality>
<postal-code>SW1A 2AA</postal-code>
<country>United Kingdom</country>
</adr>
</person>
</contacts>
perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'