1
0
Fork 0
mirror of https://github.com/perlbot/perlbuut synced 2025-06-08 12:25:42 -04:00
perlbuut/deps/Math/Farnsworth/Units/Currency.pm
2009-12-05 00:02:04 -05:00

79 lines
2.6 KiB
Perl

package Math::Farnsworth::Units::Currency;
use strict;
use warnings;
use Data::Dumper;
use Math::Farnsworth::Value;
use Math::Farnsworth::Value::Pari;
use Finance::Currency::Convert::XE;
{#this is a REALLY BAD THING TO DO BUT I DON'T WANT NO ROUNDING AT THIS LEVEL
no warnings;
package Finance::Currency::Convert::XE;
sub _format
{
return "%f";
}
}
#note that this is fairly C<en-US> centric!
my $defaultcurrency = "USD";
my $obj = Finance::Currency::Convert::XE->new(target => $defaultcurrency)
|| die "Failed to create object\n" ;
my @currencies = $obj->currencies; #go get a list of symbols
#this is a quick and dirty list of proper names and symbols for defining them below
my %symbols = (Afghanis=>'AFN',Baht=>'THB',Balboa=>'PAB',Bolivares_Fuertes=>'VEF',Bolivianos=>'BOB',Cedis=>'GHC', Colon=>'CRC',Colones=>'SVC',
Convertible_Marka=>'BAM',Cordobas=>'NIO',Denars=>'MKD',Dinars=>'RSD',Dollars=>'USD',Dong=>'VND',Euro=>'EUR',Forint=>'HUF',Francs=>'CHF',Guarani=>'PYG',
Guilders=>'ANG',Hryvnia=>'UAH',Kips=>'LAK',Koruny=>'CZK',Krone=>'NOK',Kroner=>'DKK',Kronor=>'SEK',Kronur=>'ISK',Krooni=>'EEK',Kuna=>'HRK',Lati=>'LVL',
Leke=>'ALL',Lempiras=>'HNL',Leva=>'BGN',Liras=>'TRL',Lira=>'TRY',Litai=>'LTL',Meticais=>'MZN',Nairas=>'NGN',New_Dollars=>'TWD',New_Lei=>'RON',
New_Manats=>'AZN',New_Shekels=>'ILS',Pesos=>'MXN',Pounds=>'GBP',Pulas=>'BWP',Quetzales=>'GTQ',Rand=>'ZAR',Reais=>'BRL',Ringgits=>'MYR',Riyals=>'SAR',
Rubles=>'BYR',Rubles=>'RUB',Rupees=>'INR',Rupiahs=>'IDR',Shillings=>'SOS',Soms=>'KGS',Sums=>'UZS',Switzerland_Francs=>'CHF',Tenge=>'KZT',Tugriks=>'MNT',
Won=>'KRW',Yen=>'JPY',Yuan_Renminbi=>'CNY',Zimbabwe_Dollars=>'ZWD',Zlotych=>'PLN');
sub init
{
my $env = shift;
#doupdate([],$env,[]); #ignore this for now
$env->{funcs}->addfunc("updatecurrencies", [[undef, undef, undef, 0]], \&doupdate);
}
sub doupdate
{
my ($args, $env, $branches)= @_;
for my $x (@currencies)
{
print "Fetching currency $x\n";
my $currentval = $obj->convert(
'value' => '1.00',
'source' => $x,
'format' => 'number'
) || die "Could not convert: " . $obj->error . "\n";
$env->eval("$x := $currentval dollars;");
}
for my $name (keys %symbols)
{
print "Setting up $name\n";
eval {$env->eval("$name := ".$symbols{$name});};
if ($@)
{
warn $@ if ("".$@ =~ "Undefined symbol"); #ignore ones that aren't there anymore, dunno WHY that happens though, i blame XE
die $@ if ("".$@ !~ "Undefined symbol"); #ignore ones that aren't there anymore, dunno WHY that happens though, i blame XE
}
}
return undef;
}
1;