use warnings; use DBI; use File::Basename; my $dir = '.'; my $file = 'noname.csv'; my $table = (fileparse($file,'.csv'))[0]; my $cols = [qw(Username Email Posts Timestamp)]; my $sep = ','; open outFile, '>', $file; print outFile <connect( "DBI:CSV:f_dir=$dir;csv_eol=\n;csv_sep_char=$sep;", {RaiseError=>1},); $dbh->{csv_tables}->{$table} = { file => $file, col_names => $cols, }; my $sth = $dbh->prepare("SELECT Username, Email, Posts, Timestamp FROM noname"); $sth->execute() or die "Cannot execute: " . $sth->errstr(); my %newPosts; while ((my $Username, my $Email, my $Posts, my $Timestamp) = $sth->fetchrow_array ()) { next if ! defined $Timestamp; print "$Username, $Email, $Posts, $Timestamp\n"; $newPosts{$Username} = ++$Posts; } for my $Username (keys %newPosts) { my $Posts = $newPosts{$Username}; $sth = $dbh->prepare("UPDATE noname SET Posts = $Posts WHERE Username = '$Username'"); $sth->execute() or die "Cannot execute: " . $sth->errstr(); } $sth = $dbh->prepare("SELECT Username, Email, Posts, Timestamp FROM noname"); $sth->execute() or die "Cannot execute: " . $sth->errstr(); while ((my $Username, my $Email, my $Posts, my $Timestamp) = $sth->fetchrow_array ()) { next if ! defined $Timestamp; print "$Username, $Email, $Posts, $Timestamp\n"; } $sth->finish();