#!/usr/bin/perl

use strict;
use warnings;

use XML::Twig;

my $CATALOG_FILE = "plant_catalog.xml";

# a rather silly example of extracting information from a web page with XML::Twig
# nparse creates a new twig and parses the argument (an html file here)
my $RATE         = XML::Twig->nparse( "http://www.x-rates.com/index.html")
                            ->first_elt( q{a[@href="/d/USD/EUR/graph120.html"]})
                            ->text;
warn "rate: 1 EUR = $RATE USD\n";

my $catalog=  XML::Twig->new( twig_roots => { price    => \&price, },
                              twig_print_outside_roots => 1,
                            );

$catalog->parsefile( $CATALOG_FILE);

exit;

sub price
  { my( $twig, $price)= @_;
    my $value= $price->text;
    if( $value=~ /^\$(.*)$/)
      { my $dollar_value= $1;
        my $euro_value= sprintf( "%5.2f", $dollar_value / $RATE);
        $price->set_text( $euro_value);
        $price->set_att( currency => "EUR");
      }
    else
      { die "wrong dollar value '$value'\n"; }

    $price->print;
    $twig->purge;
  }

