Using up-to-date currency conversion rates

alexm on 2008-09-05T17:42:02

A friend of mine is living this year in the USA, and she asked me how to program with Perl some unit conversions. The currency conversion is volatile since the ratio changes a lot, so I came up with this:

use strict;
use warnings;

use File::Basename;
use Cache::FileCache;
use Finance::Quote;

die "usage: $0 amount currency_from currency_to\n"
    unless @ARGV == 3;

my $amount = shift @ARGV;

my ($currency_from, $currency_to) = map { uc } @ARGV;

my ($filename) = fileparse($0, '.pl');

my $cache = Cache::FileCache->new({
    cache_root         => "$ENV{HOME}/.$filename",
    default_expires_in => '1 day',
});

my $quote = Finance::Quote->new();

my $ratio = $cache->get("$currency_from:$currency_to");

$ratio = $quote->currency($currency_from, $currency_to)
    unless defined $ratio;

die "sorry, cannot convert from $currency_from to $currency_to\n"
    unless defined $ratio;

$cache->set("$currency_from:$currency_to", $ratio);
print "$amount $currency_from = ", $amount * $ratio, " $currency_to\n";

She liked it, and so do I because it's so simple that it doesn't need comments at all. Just try:

$ perl exchange.pl 100 usd eur
100 USD = 70.22 EUR


So so lazy

jtrammell on 2008-09-05T18:57:12

http://www.google.com/search?q=100+USD+in+euros

xe.com

cyocum on 2008-09-05T23:19:20

I either use Google Finance or XE.com. These give you mid-market rates so they might be higher than what you get at a bank. This happens when I exchange money at the Bank of Scotland. The Bank of Scotland is almost always lower than mid-market rate by two or three pence at least.

Re:xe.com

Aristotle on 2008-09-06T06:23:02

You can ask Google directly, btw, just use their calculator’s regular unit conversion syntax, eg. [100 usd in eur].

...asked me how to program with Perl

alexm on 2008-09-08T12:20:25

Sure, there are many other ways to get currency conversion rates (I usually happen to use xe.com), but I was asked how to do it with Perl ;)