Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re^2: Storing Experience for Posterity

by GotToBTru (Prior)
on Jun 18, 2014 at 19:02 UTC ( #1090339=note: print w/replies, xml ) Need Help??


in reply to Re: Storing Experience for Posterity
in thread Storing Experience for Posterity

Changes:

  • Added error message if web page get fails
  • Use strftime instead of backtics and Windows date symbols
  • Test to see if all 3 values were found before logging
  • Using Tie::File for easy read-write access to file
  • Replace latest line with new data if Level has not changed
  • Added error message if regex could not find all 3 values
  • Replace 2 s/// with 1 tr///
  • Add math and reporting of anticipated level up
use strict; use warnings; use LWP::Simple; use URI::URL; use POSIX qw/strftime/; use Tie::File; use DateTime; my $date= strftime "%Y%m%d", localtime; # YYYYMMDD my ($url, $content, $experience, $level, $posts); $url = url('http://perlmonks.org/?node_id=844862'); $content = get($url) or die "Get failure"; $content =~ tr/\cJ\cM//d; ($experience, $level, $posts) = ($content =~ /Experience:\D+(\d+).+ Level:.+([A-Z][a-z]+\s+\(\d+\)).+ Writeups:.+>(\d+)</x); die unless ($experience && $level && $posts); my ($start, $startdt, $startexp, $today); tie my @log, 'Tie::File', 'perl_xp.csv'; ($start, $startexp) = (split ',', $log[-2])[0,1]; if ($level eq (split ',',$log[-1])[3] || '') { pop @log; } push @log, join ',',$date,$experience,$posts,$level; untie @log; my ($year,$month,$day) = $start =~ m/(\d{4})(\d\d)(\d\d)/; $startdt = DateTime->new(year => $year, month=> $month, day => $day); ($year,$month,$day) = $date =~ m/(\d{4})(\d\d)(\d\d)/; $today = DateTime->new(year => $year, month=> $month, day => $day); my $timeflies = $startdt->delta_days($today)->{days}; my $exprate = ($experience-$startexp)/$timeflies; printf "%d days, %d posts, %d points, %.2f points per day\n",$timeflie +s,$posts,$experience,$exprate; my $nextlevel = 3000; my $leveldays = ($nextlevel - $experience)/$exprate; my $leveldate = $today->add(days => $leveldays); printf "Level up in %d days, on %s\n", $leveldays, $leveldate->mdy();
1 Peter 4:10

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1090339]
help
Chatterbox?
[msh210]: perl -e'warn "test$/", "" '
[msh210]: doesn't append anything.
[msh210]: It should say "If the last nonempty element of LIST" or "If the string thus to be printed does not end in a newline""
[msh210]: Am I wrong?
[shmem]: no. You're right.
[msh210]: About time... last time I was right was... I don't even remember when.
[shmem]: perl -e 'warn "test$/", ^@^ '
[Eily]: well, at least it's right about warn doing the same thing as die :)
[shmem]: same with undef as last element
[msh210]: oh, good point. It's the best kind of correct

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (19)
As of 2017-04-24 12:41 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I'm a fool:











    Results (439 votes). Check out past polls.