#!/usr/bin/perl ################################################## # ccon -- Mike Schilli, 2001 (m@perlmeister.com) # Convert currencies on the command line. # Syntax: ccon amount source target # [EUR,USD,DEM,GBP,ATS,ESP,FRF, # FRF,GRD,ITL,NLG,AUD,CHF,JPY] ################################################## use 5.6.0; use warnings; use strict; use Finance::Currency::Convert; use Time::Local; my $RATES_CACHE = "$ENV{HOME}/.currency"; my($amount, @WAY) = @ARGV; die "usage: $0 amount from to\n" unless defined $ARGV[2]; my $conv = Finance::Currency::Convert->new(); # Cache-Datei setzen und lesen falls # vorhanden $conv->setRatesFile($RATES_CACHE); if(!$conv->convert($amount, @WAY) or update_recommended()) { # Vom Internet nachladen print "Updating ... Please wait.\n"; $conv->updateRate(@WAY); $conv->writeRatesFile(); } my $rate = $conv->convert($amount, @WAY); die "Can't convert ", join(' => ', @WAY) unless defined $rate; print "$rate\n"; ################################################## sub update_recommended { ################################################## # nicht vorhanden => nachladen return 1 unless -f $RATES_CACHE; my $date = time(); my @date = localtime($date); $date -= 3600*24 if $date[2] < 10; # Letzten Werktag suchen { @date = localtime($date); $date -= 3600*24, redo if $date[6] == 0 or $date[6] == 6; } # Auf 10:00 setzen @date[0..2] = (0, 0, 10); # Zurück ins Sekundenformat $date = timelocal(@date); return (stat($RATES_CACHE))[9] < $date; }