#! /usr/bin/perl -w use strict; use DBI; use FindBin; my $new_total = 10; open my $fh, '>', $FindBin::Bin . '/data'; print $fh ("DATE,NUMBER\n2005-05-16,2\n2005-05-17,4\n"); close $fh; my $dbh = DBI->connect('dbi:CSV:f_dir=' . $FindBin::Bin . ";csv_eol=\n") or warn "Can't connect to DBI"; my $total = $dbh->selectall_arrayref('select sum(number) from data')->[0][0]; if ($total||0 != $new_total) { require Time::localtime; my $lt = Time::localtime::localtime(time(); my $date = sprintf("%04d-%02d-%02d", $lt->year + 1900, $lt->mon + 1, $lt->mday); my $count = $dbh->selectall_arrayref('select count(*) from data where date = ?', {}, $date)->[0][0]; my $cur = $dbh->selectall_arrayref('select number from data where date = ?', {}, $date); $cur = $cur->[0] while $cur and ref $cur; my $gained = $new_total - ($total||0); if ($count) { $cur += $gained; print "Updating today ($date) to be Number = $cur\n"; $dbh->do('update data set number = ? where date = ?', {}, $cur, $date); } else { $cur = $gained; print "Inserting into today to be Number = $cur\n"; $dbh->do('insert into data (date,number) values(?,?)', {}, $date,$cur); } } #### DATE,NUMBER 2005-05-16,2 2005-05-17,8 #### DATE,NUMBER 2005-05-16,2 2005-05-17,2005-05-17 #### $ perl -MDBD::CSV -e 'print "perl\t$]\n"; print $_,"\t",${$_."::VERSION"},$/ foreach @ARGV' DBD::CSV SQL::Statement SQL::Parser Text::CSV_XS SQL::Statement::Util perl 5.008005 DBD::CSV 0.22 SQL::Statement 1.14 SQL::Parser 1.13 Text::CSV_XS 0.23 SQL::Statement::Util -1, set by base.pm #### perl 5.008006 DBD::CSV 0.21 SQL::Statement 1.09 SQL::Parser 1.09 Text::CSV_XS 0.23 SQL::Statement::Util