Alice 40000 Bob 37500 #### { package MegaCorp::Person; use XML::LibXML::Augment -names => ['{http://megacorp.example/}person']; sub get_salary { shift -> getElementsByTagName('salary') -> get_node(1) # not zero-indexed! -> textContent; } sub get_bank_account { shift -> getElementsByTagName('bank_account') -> get_node(1); } sub pay_salary { my $self = shift; my $acct = $self->get_bank_account; $acct->accept_funds($self->get_salary); } } { package MegaCorp::BankAccount; use XML::LibXML::Augment -names => ['{http://megacorp.example/}bank_account']; sub accept_funds { ... } } { package main; use XML::LibXML::Augment; my $doc = XML::LibXML->load_xml(location => 'emp.xml'); # Switch on augmentation for this document! XML::LibXML::Augment->upgrade($doc); my @employees = $doc->getElementsByTagName('person'); $_->pay_salary for @employees; }